数据分析之合并数据

对DataFrame进行纵向拼接

函数用法返回值是否改变原值
concatPandas.concat([DataFrame1, DataFrame2, …])拼接后的新DataFrame

concat函数的一些参数:

参数赋值作用
ignore_indexTrue只保留DataFrame1的索引并对拼接后其他DataFrame索引自动赋值
axis1对DataFrame进行横向的拼接

tip:匹配不上的元素会被赋值为空

对DataFrame进行合并

适用情况函数用法返回值是否改变原值
对单个列进行匹配mergePandas.merge(DataFrame1, DataFrame2, on=列名)指定列名上的值相同的行进行合并后的新DataFrame
对多个列进行匹配mergePandas.merge(DataFrame1,DataFrame2, on=[列名1, 列名2, …])指定列名上的值都相同的行进行合并后的新DataFrame
列名含义相同,但名称不同mergePandas.merge(DataFrame1,DataFrame2, left_on=[列名1_1, 列名1_2, …],right_on=[列名2_1, 列名2_2, …])left_on和right_on中位置对应的指定列名上的值都相同的行进行合并后的新DataFrame
非指定列列名相同merge
Pandas.merge(DataFrame1,DataFrame2,suffixes=[后缀1, 后缀2])
指定列名上的值相同的行进行合并后,将非指定列列名相同的列的列名分别加上后缀1和后缀2的新DataFrame

merge函数的一些参数:

参数赋值作用
howinner只保留所有DataFrame匹配行
howouter不匹配和匹配行都保留
howleft保留DataFrame1的所有行,不保留DataFrame2中的不匹配行
howright保留DataFrame2的所有行,不保留DataFrame1中的不匹配行

根据索引进行合并DataFrame

方法用法返回值是否改变原值
joinDataFrame1.join(DataFrame2)按照索引合并后的新DataFrame

join方法的一些参数:

参数赋值作用
how与merge函数相同与merge函数相同
lsuffix后缀1将DataFrame1中的重复列名加上为后缀1
rsuffix后缀2将DataFrame2中的重复列名加上为后缀2

对DataFrame进行分组运算

方法用法返回值是否改变原值
groupbyDataFrame.groupby(列名)按照列名分组后的DataFrameGroupBy实例
groupbyDataFrame.groupby(列名列表)按照列名列表分组后的DataFrameGroupBy实例

得到的DataFrameGroupBy实例一般搭配聚合函数使用,如:

#每个组对于指定列名的平均值
DataFrame.groupby[指定列名].mean()

一般的聚合函数有:

聚合函数作用
count()得到元素的数量
first()得到第一个元素
last()得到最后一个元素
mean()得到所有元素平均值
median()得到所有元素中位数
min()得到所有元素的最小值
max()得到所有元素的最大值
std()得到所有元素的标准差
var()得到所有元素的方差
prod()得到所有元素的积
sum()得到所有元素的和

当然也可以使用apply方法来使用一些自定义的聚合函数

由于groupby是按数值分组,可能每个数值都分一个组,会导致分组过后有很多组,还是难以分析数据

解决方法:

函数用法返回值是否改变原值
cutPandas.cut(Serises, 自定义分组列表,自定义分组标签列表)按照自定义分组列表对的Serises内的元素进行分组标签赋值后的category类型Serises

例子:

bins = [10, 20, 30, 40]
labels = ["儿童", "青少年", "青年", "壮年"]
# 获得对DataFrame指定列进行分组标签赋值后的category类型Serises
temp = Pandas.cut(DataFrame[列名], bins, label=labels)

# 通过这个Series创建一个新列
DataFrame[新列名] = temp 

# 然后再对这个列进行groupby操作
DataFrame.groupby(新列名).聚合函数()

如果按照多个列名进行groupby方法的话,生成的DataFrameGroupBy实例是具有嵌套索引的,例如:

temp = DataFrame.groupby([列名1, 列名2]).聚合函数()
# 这里的temp.loc[列名1]会以列名2的值作为索引

如果不想要嵌套索引的方法:

方法用法返回值是否改变原值
reset_indexDataFrame.reset_index()重置索引后的新DataFrame

Pandas的透视表

透视表就是基于原始数据对表进行重塑

函数用法返回值是否改变原值
pivot_tablePandas.pivot_table(DataFrame,index=[列名1_1,列名1_2,…],columns=列名2_1,values=列名3_1,aggfunc=聚合函数)基于DataFrame数据的透视表

DataFrame的另一种条件筛选方法

函数用法返回值是否改变原值
queryDataFrame.query(条件字符串)条件筛选后的新DataFrame

By Liu

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注