需求:计算911紧急拨号不同类型的次数

根据已经获取到的数据,我们可以从中发现,具体的分类是在title列下字符串的前半段。至此,我们可以明确目标:
1.获取分号之前的字符串 ----- 按照“:”切割
2.统计 ----- sum()、count()
方法一:在原有数据基础上,直接分类统计
思路:首先,按照“:”分割字符串并将结果转化为list;接着,遍历list,将第i个元素中的第一个子元素取出,就得到了每个元素的分类,再用set()去重,最后转为list得到所有分类类型的列表;然后,我们就该统计,按照常理,既然有了所有分类,之前又得到了分割后具有分类的列表,那么直接去遍历,对应分类计数即可。在执行过程中会有两种方式:
1.逐行遍历赋值
每一行都去和分类比较,在对应的分类下计数
这种方式理论可行,但在实际的操作执行过程中很耗时间。
2.分类赋值
按照找出的分类,按照分类赋值
其中涉及contains()函数,它可以迅速返回目标的布尔值,借助布尔值实现直接分类赋值。
在统计时我们还要创建一组全为零的dataframe,遍历计数是需要用到的。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\STXINGKA.TTF",size=18)
file_path = "911-calls/911.csv"
df = pd.read_csv(file_path)
temp_list = df["title"].str.split(":").tolist()
cate_list = list(set(i[0] for i in temp_list))
print(cate_list)
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)
for cate in cate_list:
zeros_df[cate][df["title"].str.contains(cate)] = 1
print(zeros_df)
sum_ret = zeros_df.sum(axis=0)
print(sum_ret)
方法二:在原有数据基础上,再设置一列为分类,进行对该列的统计
思路:首先,按照“:”分割字符串并将结果转化为list;接着,遍历list,将第i个元素中的第一个子元素取出,定义为新的一列;最后,直接分组统计分类一列即可。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\STXINGKA.TTF",size=18)
file_path = "911-calls/911.csv"
df = pd.read_csv(file_path)
temp_list = df["title"].str.split(":").tolist()
cate_list = [i[0] for i in temp_list]
cate_df = pd.DataFrame(np.array(cate_list).reshape((df.shape[0]),1))
df["cate"] = cate_df
print(df.groupby(by="cate").count()["title"])
Python----数据分析-pandas.数据的分组、聚合对数据进行整体性的聚合运算以及分组操作也是数据分析的重要内容。通过数据的聚合与分组,我们能更容易的发现隐藏在数据中的规律。下面我们根据星巴克的案例来进行学习~......
分组聚合的原理一般分为拆分-应用-合并。( )
只要使用groupby()方法分组就会产生一个DataFrameGroupby对象。( )
使用agg()方法进行聚合运算会对产生的标量值进行广播。( )
使用transform()方法进行聚合运算,其结果可以保持与原数据形状相同。( )
apply()方法可以使用广播功能。( )
下列选项中,关于groupby()方法说法不正确的是。( )
分组键可以是列表或数组,但长度不需要与待分组轴的长度相同
可以通过DataFrame中的列名的值进行分组
可以使用函数进行分组
可使用series或字典分组
下列选项中,关于agg()方法使用不正确是。( )
agg()方法中func参数只能传入一个函数
agg()方法中func参数可以传入多个函数
agg()方法中func参数可以传入自定义函数
agg()方法不能对产生的标量值进行广播
其实这种数据分组与SQL中的Group by语句的功能是一样的。
实际上,我们可以把 groupby 理解成一个分割(split),应用(apply),组合(combine)的过程
一个经典分割-应用-组合操作如下图所示,其中应用的是一个求和函数.
分割: 将 DataFrame按照指定的键分割成若干组
应用: 对每个组应用函数, 通常是累计,转换或过滤函数
组合: 将每一组的结果合并成一个输出组
数据分组
在数据处理中, 我们经常需要把某些特征的共同值进行累计分析
在SQL中我们经常使用 GROUP BY 将某个字段,按不同的取值进行分组, 在pandas中也有groupby函数
分组之后,每组都会有至少1条数据, 将这些数据进一步处理返回单个值的过程就是聚合,比如 分组之后计算算术平均值, 或者分组之后计算频数,都属于聚合
数据聚合,一般都是指对分组中的数据执行某些操作,比如求平均值、求最大值等,并且操作后得到一个结果集,这些实现聚合的操作称为聚合方法。Pandas中提供了用做聚合操作的agg()方法。
一、使用内置统计方法聚合数据
前面已经介绍过Pandas的统计方法,比如用于获取最大值和最小值的max()和min(),这些方法常用于简单地聚合分组中的数据。
假设现在我们
Python报错:‘unicodeescape‘ codec can‘t decode bytes in position 2-3: truncated \UXXXXXXXX escape
45993