Python学习笔记-数据分析-Pandas06—合并、连接、修补、去重、替换

Pandas数据结构—合并、连接、修补、去重、替换
一、合并(一) merge
二、合并(二)join
三、连接 concat
四、修补 combine_first、updata
五、去重 duplicated
六、替换 replace
一、合并(一)-merge
merge有点类似vlookup,但是比vlookup更灵活。
merge的参数有很多:
left, right, how=‘inner’, on=None, left_on=None, right_on=None,left_index=False, right_index=False,
sort=True, suffixes=(’_x’, ‘_y’), copy=True, indicator=False
df1 = pd.DataFrame({
   'key': ['K0', 'K1', 'K2', 'K3'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({
   'key': ['K0', 'K1', 'K2', 'K3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})
df3 = pd.DataFrame({
   'key1': ['K0', 'K0', 'K1', 'K2'],
                    'key2': ['K0', 'K1', 'K0', 'K1'],
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})
df4 = pd.DataFrame({
   'key1': ['K0', 'K1', 'K1', 'K2'],
                    'key2': ['K0', 'K0', 'K0', 'K0'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})
# 可以看到df1和df2都有key这个列,并且数据都相同。
print(df1)
print('--------------------------------')
print(df2)
print('--------------------------------')
# df3和df4都有key1列和key2列,但是有一部分数据不同。
print(df3)
print('--------------------------------')
print(df4)
print('--------------------------------')

运行结果如下:

  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
3  K3  A3  B3
--------------------------------
  key   C   D
0  K0  C0  D0
1  K1  C1  D1
2  K2  C2  D2
3  K3  C3  D3
--------------------------------
  key1 key2   A   B
0   K0   K0  A0  B0
1   K0   K1  A1  B1
2   K1   K0  A2  B2
3   K2   K1  A3  B3
--------------------------------
  key1 key2   C   D
0   K0   K0  C0  D0
1   K1   K0  C1  D1
2   K1   K0  C2  D2
3   K2   K0  C3  D3
--------------------------------
1、参数 left 、right、on
left:准备合并的第一组数据
right:准备合并的第二组数据
on:参考键
# 通过设置参数on的值来确定合并的参考键。也就说以什么作为参考。on = 'key'就是以key作为参考。
print('将df1和df2进行合并,合并的原则是根据参考键key: \n',pd.merge(df1, df2, on = 'key'))
print('--------------------------------')

# df3和df4的key1和key2的第一行数据相同,所以进行合并。
# df3的key1和key2的第二行数据,在df4的key1和key2列中没有相同的数据,所以不进行合并。
# 注意:df3的key1和key2的第三行数据,和df4的key1和key2列中有两行相同的数据,所以会进行两次合并。
# # df3的key1和key2的第四行数据,在df4的key1和key2列中没有相同的数据,所以不进行合并。
print(pd.merge(df3, df4, on = ['key1','key2']))

运行结果如下:

将df1和df2进行合并,合并的原则是根据参考键key: 
   key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3
--------------------------------
  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K0  A2  B2  C1  D1
2   K1   K0  A2  B2  C2  D2
2、参数how
how:合并方式
# how = 'inner':表示取的是交集
print(pd.merge(df3, df4,on=['key1','key2'], how = 'inner'))  
print('--------------------------------')

# how = 'outer':表示取的是并集,如果数据缺失就用NaN填充
print(pd.merge(df3, df4, on=['key1','key2'], how = 'outer'))  
print('--------------------------------')

# how = 'left':表示将第一组准备合并的数据为参考进行合并(本例中是df3),如果数据缺失就用NaN填充
print(pd.merge(df3, df4, on=['key1','key2'], how = 'left'))  
print('--------------------------------')

# how = 'right':表示将第二组准备合并的数据为参考进行合并(本例中是df4),如果数据缺失就用NaN填充
print(pd.merge(df3, df4, on=['key1','key2'], how = 'right'))  

运行结果如下:

  key1 key2   A   B   C   D
0   K0   K0  A0  B0  C0  D0
1   K1   K0  A2  B2  C1  D1
2   K1   K0  A2  B2  C2  D2
--------------------------------
  key1 key2    A    B    C    D
0   K0   K0   A0   B0   C0   D0
1   K0   K1   A1   B1  NaN  NaN
2   K1   K0   A2   B2   C1   D1
3   K1   K0   A2   B2   C2   D2
4   K2   K1   A3   B3  NaN  NaN
5   K2   K0  NaN  NaN   C3   D3
--------------------------------
  key1 key2   A   B    C    D
0   K0   K0  A0  B0   C0   D0
1   K0   K1  A1  B1  NaN  NaN
2   K1   K0  A2  B2   C1   D1
3   K1   K0  A2  B2   C2   D2
4   K2   K1  A3  B3  NaN  NaN
--------------------------------
  key1 key2    A    B   C   D
0   K0   K0   A0   B0  C0  D0
1   K1   K0   A2   B2  C1  D1
2   K1   K0   A2   B2  C2  D2
3   K2   K0  NaN  NaN  C3  D3
3、参数 left_on, right_on, left_index, right_index
当键不同时,可以通过left_on, right_on分别设置左键与右键。当键相同时,直接用on
当两组数据的列名不同时可以使用left_index, right_index来进行合并操作。
left_on, right_on, left_index, right_index可以进行相互的组合:
left_on + right_on, left_on + right_index, left_index + right_on, left_index + right_index
df1 = pd.DataFrame({
   'xkey':list('abcdefs'),
                   'data1':range(7)})
df2 = pd.DataFrame({
   'ykey':list('abd'),
                   'date2':range(3)})
print(df1)
print('--------------------------------')
print(df2)
print('--------------------------------')

# 通过left_on='xkey', right_on='ykey'分别设置了合并所需的左键和右键。
# 在合并的时候,依然会比较这两个键里的具体数据是否有相同的,如果有就进行合并。
print(pd.merge(df1, df2, left_on='xkey', right_on='ykey'))
print('--------------------------------')


df3 = pd.DataFrame({
   'key':list('abcdfeg'),
                   'data1':range(7)})
df4 = pd.DataFrame({
   'data2':range(10,15)},
                  index = list('abcde'))
print(df3)
print('--------------------------------')
print(df4)
print('--------------------------------')

# df3有key和data1两列,df4除了index就只有data2一列,但是index和df3的key有部分相同。
# 将df3设置成以‘key’为键,而df4设置成以index为键。
# left_index:为True时,第一组数据是以index为键,默认False
# right_index:为True时,第二组数据是以index为键,默认False
print(pd.merge(df3, df4, left_on='key', right_index=True))

运行结果如下:

  xkey  data1
0    a      0
1    b      1
2    c      2
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值