Pandas 数据整合

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函数
具体使用方法以及作业如下
concatenation函数

contact函数
下面假设没有重叠索引
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)  #这里和上面一定程度是等价的

combine_first解释
上面合并时候b相对a的’b’和’a’索引缺失所以用a来填充

重塑和轴向旋转

重塑层次化索引

  • stack将数据的列"旋转"为行
  • unstack将数据的行"旋转"为列

对于一个层次化索引的Series可以用unstack(可能引入缺失数据)重排为DataFrame

  • stack默认会滤除缺失数据,所以这两个是可逆的
  • unstack旋转的时候旋转轴等级最低
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值