数据处理——数据合并

# 一样,数据处理就先给导入pandas先
import pandas as pd

# df1==df2
df1 = pd.DataFrame({'一班':[90,80,66,75,99,55,76,78,98,None,90],
                   '二班':[75,98,100,None,77,45,None,66,56,80,57],
                   '三班':[45,89,77,67,65,100,None,75,64,88,99]})
df2 = pd.DataFrame({'一班':[90,80,66,75,99,55,76,78,98,None,90],
                  '二班':[75,98,100,None,77,45,None,66,56,80,57],
                  '三班':[45,89,77,67,65,100,None,75,64,88,99]})

 

1数据堆叠

  数据堆叠分为以下两种:

    • 行堆叠
    • 列堆叠

  pd.concat(objs, axis=0)

  • objs:参与合并的多个DataFrame。无默认
  • axis:表示轴向,axis=0表示行合并,axis=1表示列合并
pd.concat([df1, df2, df3], axis=1)
 一班三班二班一班三班二班一班三班二班
090.045.075.090.045.075.090.045.075.0
180.089.098.080.089.098.080.089.098.0
266.077.0100.066.077.0100.066.077.0100.0
375.067.0NaN75.067.0NaN75.067.0NaN
499.065.077.099.065.077.099.065.077.0
555.0100.045.055.0100.045.055.0100.045.0
676.0NaNNaN76.0NaNNaN76.0NaNNaN
778.075.066.078.075.066.078.075.066.0
898.064.056.098.064.056.098.064.056.0
9NaN88.080.0NaN88.080.0NaN88.080.0
1090.099.057.090.099.057.090.099.057.0

 

  当然,如果axis=0(行堆叠)时,也可以使用append函数

# append 直接在末尾追加,注意特征数目相同,并且数据类型相同
df1.append(df2)
 一班三班二班
090.045.075.0
180.089.098.0
266.077.0100.0
375.067.0NaN
499.065.077.0
555.0100.045.0
676.0NaNNaN
778.075.066.0
898.064.056.0
9NaN88.080.0
1090.099.057.0
090.045.075.0
180.089.098.0
266.077.0100.0
375.067.0NaN
499.065.077.0
555.0100.045.0
676.0NaNNaN
778.075.066.0
898.064.056.0
9NaN88.080.0
1090.099.057.0

 

2主键合并

  主键合并大概是应用最关的合并方式了,也是我最喜欢的方式。

 

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, suffixes=('_x', '_y'))

  • left:表示进行合并的左边的DataFrame。无默认。
  • right:表示进行合并的右边的DataFrame。无默认。
  • how:表示合并的方法。默认为'inner'。可取'left'(左连接),'right'(右连接),'inner'(内连接),'outer'(外连接)。
  • on:表示合并的主键。默认为空。
  • left_on:表示左边的合并主键。默认为空。
  • right_on:表示右边的合并主键。默认为空。
  • suffixes:表示列名相同的时候的后缀。默认为('_x', '_y')

 

# 合并数据
pd.merge(df1, df2, on='一班')
 一班三班_x二班_x三班_y二班_y
090.045.075.045.075.0
190.045.075.099.057.0
290.099.057.045.075.0
390.099.057.099.057.0
480.089.098.089.098.0
566.077.0100.077.0100.0
675.067.0NaN67.0NaN
799.065.077.065.077.0
855.0100.045.0100.045.0
976.0NaNNaNNaNNaN
1078.075.066.075.066.0
1198.064.056.064.056.0
12NaN88.080.088.080.0

 

pd.merge(df1, df2, left_on='一班', right_on='二班', suffixes=('_1', '_2))
 一班_1三班_1二班_1一班_2三班_2二班_2
080.089.098.0NaN88.080.0
166.077.0100.078.075.066.0
275.067.0NaN90.045.075.0
398.064.056.080.089.098.0
4NaN88.080.075.067.0NaN
5NaN88.080.076.0NaNNaN

 

3重叠合并

  不是特别建议,毕竟重叠合并没什么依据,而且浪费数据资源。

 

  DataFrame.combine_first(other) 重叠合并,当两者皆有以前者为准,为空时,则使用后者的补上。

df1['一班'].combine_first(df1['二班'])
0     90.0
1     80.0
2     66.0
3     75.0
4     99.0
5     55.0
6     76.0
7     78.0
8     98.0
9     80.0
10    90.0
Name: 一班, dtype: float64

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WoLykos

若对你有所帮助,请鼓励我一下~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值