Pandas: 数据合并

1.记录合并

记录合并是指将两个结构相同的数据框合并成一个数据框,也就是在一个数据框中追加另一个数据框的数据记录。

1.1 concat 函数

函数说明:concat方法相当于数据库中的全连接(union all),它不仅可以指定连接的方式(outer join 或 inner join),还可以指定按照某个轴进行连接。与数据库不同的是,它不会去重,但可以使用drop_duplicates方法达到去重的效果。

命令格式:

concat([dataFrame1, dataFrame2,…], index_ingore=False)

参数说明:dataFrame1 表示数据框

返回值:DataFrame。

参数说明:index_ingore=False(表示记录的索引不延续),index_ingore=True(表示记录的索引可延续)

示例:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 20, (5, 2)), columns=['A', 'B'])

print(df)
print("-----")

data = [df[0:2], df[3:]]

print(pd.concat(data, ignore_index=False))
print("-----")
print(pd.concat(data, ignore_index=True))

返回:

    A   B

0   6  13
1  19   2
2  12  18
3   1   0
4  11   9

-----

    A   B

0   6  13
1  19   2
3   1   0
4  11   9

-----

    A   B

0   6  13
1  19   2
2   1   0
3  11   9

 

1.2 append 函数

df.append(df2, index_ignore=True) # 把df2追加到df上,index直接延续

参数说明:index_ingore=False(表示记录的索引不延续),index_ingore=True(表示记录的索引可延续)

 

示例:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 20, (3, 2)), columns=['A', 'B'])

print(df)
print("-----")

narry = np.random.randint(0, 20, (2, 2))
data = pd.DataFrame(narry, columns=['A', 'B'])
print(df.append(data, ignore_index=True))

 

返回:

    A   B

0  18  12
1   3  12
2   6  11

-----

    A   B

0  18  12
1   3  12
2   6  11
3  12   8
4   9  15

2.字段合并

字段合并是指将同一个数据框中的不同列进行合并,形成新的列。其命令如下:

pd.merge( left, right, how="inner", on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=("_x", "_y"), copy=True, indicator=False, validate=None, )

参数说明:

参数说明
left

 

right

 

how连接方式:inner、left、right、outer,默认为 inner
on用于连接的列名
left_on左表用于连接的列名
right_on右表用于连接的列名
Left_index是否使用左表的行索引作为连接键,默认为False
Right_index是否使用右表的行索引作为连接键,默认为False
sort默认为False,将合并的数据进行排序
copy默认为True。总是将数据复制到数据结构中,设置为False可以提高性能
suffixes存在相同列名时在列名后面添加的后缀,默认为(’_x’, ‘_y')

indicator

显示合并数据中数据来自哪个表

示例1:

from pandas import DataFrame
import pandas as pd

# 默认以重叠的列名当做链接键
df1 = DataFrame({'key':['a','b','c'], 'data1':range(3)})
df2 = DataFrame({'key':['a','b','c'], 'data2':range(3)})
pd.merge(df1, df2)

结果:

示例2:

# 多键连接时将连接键组成列表传入

right=DataFrame({'key1':['foo','foo','bar','bar'],  
         'key2':['one','one','one','two'],  
         'lval':[4,5,6,7]})  

left=DataFrame({'key1':['foo','foo','bar'],  
         'key2':['one','two','one'],  
         'lval':[1,2,3]})  

right=DataFrame({'key1':['foo','foo','bar','bar'],  
         'key2':['one','one','one','two'],  
         'lval':[4,5,6,7]})  

pd.merge(left,right,on=['key1','key2'],how='outer')

结果:

 

参考:https://blog.csdn.net/gdkyxy2013/article/details/80785361

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小狼躲藏

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值