Pandas数据分析Python数据分析师2020特训营-Pandas DataFrame 3
智汇君Python数据分析师2020特训营-Pandas DataFrame 3
DataFrame
数据整合
1
| 数据整合又称数据合井,将不同的数据合并在一起,这样可以将不同的信息集成在一张表上,有利于之后的分析
|
1
| 常见的合并方法有堆叠和按主键进行合井,堆叠又分为横向堆叠和纵向堆叠,按主键合并类似于sql里面的关联操作
|
堆叠concat
1 2 3 4 5
| 横向堆叠特两张表或多张表在X轴方向,即横向拼接在一起 纵向堆叠将两张表或多张表在Y轴方向,即纵向拼接在一起
注意使用concat时,axis=1用于横向,0代表纵向(默认为0) 注意join取inner或者outer时:分别代表交集和并集
|
横向堆叠
1 2 3
| data=pd.concat([df1,df2],axis=1,join='inner') # 按行标签取交集,行标签需要一样
data=pd.concat([df1,df2],axis=1,join='outer') # 行标签一样的连接在一起,另外的类似sql全外连接
|
纵向堆叠
1 2 3 4
| 适合各表数据意义一样,每一列名字一样和顺序一样的 data=pd.concat([df1,df2],axis=0,ignore_index=False) # 标签值不一定唯一
data=pd.concat([df1,df2],axis=0,ignore_index=True) # 显式标签设置成了隐式标签 唯一
|
.merge
[数据分析 Pandas学习-DataFrame]
层级索引
[数据分析 Pandas学习-DataFrame]
数据排序
[数据分析 Pandas学习-DataFrame]
分组聚合
[数据分析 Pandas学习-DataFrame]
透视图和交叉表
1
| 在数据分析中,数据透视表是常见的工具之一,需要根据行或列对数据进行各个维度数据的汇总,在pandas中,提供了相关函数解决此类问题
|
透视图 pivot_table
透视图参考
1 2 3 4 5 6 7 8 9 10
| pivot_table(data,index,columns,value,aggfun,fill_value,margins,margins_name)
index 行分组键(作为行索引) columns 列分组键(作为列索引) values 分组字段(需要汇总计算的列,可多选),只能为数值型变量 aggfunc 聚合函数 margins 是否需要总计 margins_name 总计名 fill_value 空缺值处理 dropna:默认为True,如果列的所有值都是NaN,将不作为计算列,False时,被保留
|
不指定columns
1 2 3 4 5 6
| pd.pivot_table(data=df,index='Year',values='Global_Sales',aggfunc=np.mean,margins=True,margins_name='总计数') Global_Sales Year 1980 1.26 1981 077 ...
|
指定columns
1
| pd.pivot_table(data=df,index='Year',columns='Genre',values='Global_Sales',aggfunc=np.mean,margins=True,margins_name='总计数')
|
1 2 3 4 5 6 7
| Y Genre Action Adventure Fighting ... Year 1980 0.34 NaN 0.77 1961 0.69 NaN NaN 1983 0.40 0.40 NaN ...
|
fill_value
1 2 3 4
| # 使用空缺值填充 pd.pivot_table(data=df,index='Year',columns='Genre',values='Global_Sales',aggfunc=np.mean,margins=True,margins_name='总计数',fill_value=-1)
这里不写value的话,会生成列层次索引(所有数值类型都会统计)
|
多个aggfunc
1
| pd.pivot_table(data=df,index='Year',columns='Genre',values='Global_Sales',aggfunc=[np.mean,np.sum,np.median],margins=True,margins_name='总计数',fill_value=-1)
|
1
| index,columns,aggunc,values等可以是多个
|
交叉表
1 2 3 4 5 6 7 8
| pd.crosstab(index=df['Platform'],columns=df['Genre'],margins=True)
Genre action adventure fighting ... platfrom 2600 61 2 2 3DO 0 1 0 3DS 182 37 14 ...
|
,normalize
1 2 3
| all:就上面的,每个位置数据除以总数 index:每一行每个数据除以当前行总数 column:每一列每个数据除以当前列总数
|
1
| pd.crosstab(index=df['Platform'],columns=df['Genre'],margins=True,normalize='all')
|