Pandas 数据整合
标签(空格分隔): python pandas
合并数数据集
pandas.merge可以根据一个或者多个键将不同DataFrame合并起来
pandas.contact 可以沿着一个轴将多个对象叠到一起
combine_first可以将数据编接到一起,用一个对象中的值填充另一个值
数据库风格DataFrame合并
pd.merge(f1, f2) #默认将重叠列名当做键
pd.merge(f1, f2, on='key') #显示指定对'key'键进行连接
pd.merge(f1, f2, left_on='lkey', right_on='rkey') #对不同列名连接
pd.merge(f1, f2, how='outer') #默认情况下merge做inner,也就是交集
#其他方式还可以是left,right,outer
pd.merge(f1, f2, on='key', how='left') #多对多行产生笛卡尔积
#连接方式只影响出现在结果中的键
#注意,在进行列列连接的时候,DataFrame的索引会丢弃 on可以是多个键
合并运算重复列名
如f1和f2都有键key1,key2,现在想要进行key1进行合并,那么key2列名重复怎么办???
可以指定附加到左右两个DataFrame重复列名上面
pd.merge(f1, f2, on='key1', suffixes=('_left', '_right'))
#合并后的列名有:key1,key2_left,key2_right
详细的合并参数
索引上的合并
有时候DataFrame的连接键位于索引中,可以传入left_index=True或者right_index=True以说明索引应该被用作连接键
join实例方法
join可以更为方便的实现按索引合并,还可以合并多个带有相同或者相似索引的DataFrame对象,而不管他们之间有没有重叠的列
pd.merge(f1, f2, how='outer', left_index=True, right_index=True) #合并两个索引
f1.join(f2, how='outer') #和上面等价
DataFrame的join是在连接键上做左连接,他还支持参数f2的索引和调用者某个列之间连接
f1.join(f2, on='key')
对于简单的索引合并,可以用join传递多个DataFrame
f1.join([f2, f3]) #把他们按照f1索引左连接
f1.join([f2, f3], how='outer') #把他们按照f索引全连接
轴向连接
concatenation函数
NumPy有一个用于合并原始NumPy数组的concatenation函数
具体使用方法以及作业如下
contact函数
下面假设没有重叠索引
默认情况下面contact是在axis=0上工作的,最终产生一个新的Series,如果传入axis=1那么就会产生一个新的DataFrame
- 可以通过设置join='inner’来得到他们的交集
- 可以通过join_axes=[[‘a’, ‘b’, ‘c’]]来指定要在其他周使用的索引
如果参与连接的片段在结果中区分不开,可以创建一个层次化索引,通过keys参数达到这个目的,下面还可以调用result.unstack()来去层次化
如果沿着axis=1对Series进行合并,那么keys就会变成DataFrame的列头.对DataFrame合并同理
不保留连接轴上的索引,产生新的索引ignore_index=True
contact函数的参数
合并重叠数据
combine_first
这里用np.where来解释combine_first
np.where(a.isnull(), b, a)
a.combine_first(b) #这里和上面一定程度是等价的
上面合并时候b相对a的’b’和’a’索引缺失所以用a来填充
重塑和轴向旋转
重塑层次化索引
- stack将数据的列"旋转"为行
- unstack将数据的行"旋转"为列
对于一个层次化索引的Series可以用unstack(可能引入缺失数据)重排为DataFrame
- stack默认会滤除缺失数据,所以这两个是可逆的
- unstack旋转的时候旋转轴等级最低