python之pandas (4 合并)

合并

之前提到添加数据只能添加列,如果要添加行就需要使用合并功能。

concat

concat在python中主要用于添加行,即纵向合并。

import pandas as pd
import numpy as np
df1=pd.DataFrame(np.arange(1,13).reshape(3,4),columns=['a','b','c','d'])
df2=pd.DataFrame(np.arange(1,13).reshape(3,4),columns=['b','c','d','e'])
res=pd.concat([df1,df2],axis=0,ignore_index=True,join='inner')
#默认为outer(并集),inner为交集,ignore_index表示合并后是(1)否(0)要重新排index
print(res)
    b   c   d
0   2   3   4
1   6   7   8
2  10  11  12
3   1   2   3
4   5   6   7
5   9  10  11
请按任意键继续. . .

在concat函数中,第一个参数表示要合并的数据,注意要用中括号括起来;axis表示合并方向,axis=0表示纵向合并(一般都是纵向);ignore_index表示合并后的index是否重新排序,True代表重新排序;join表示合并方式,有参数outer、inner,inner表示取交集,outer表示取并集。

merge

如果想要实现类似SQL中的连接功能,应使用merge函数。

import pandas as pd
left=pd.DataFrame({'key':['k0','k1','k2','k3'],
                   'A':['A0','A1','A2','A3'],
                   'B':['B0','B1','B2','B3']})
right=pd.DataFrame({'key':['k0','k1','k2','k3'],
                   'C':['C0','C1','C2','C3'],
                   'D':['D0','D1','D2','D3']})
print(left,right,sep='\n')
res=pd.merge(left,right,on='key')#如果有多个key,可以写:on=['key1','key2']
print(res)
  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
  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
请按任意键继续. . .

当你不输入how参数时,默认是inner(内连接),除此之外还有left(左连接)、right(右连接)、outer(全连接)。

在这里,输入key参数是两个数据中都有相同的列,如果你想让数据A中的c和数据B中的d分别作为连接键,应该如下做:

import pandas as pd
left=pd.DataFrame({'key1':['k0','k1','k2','k3'],
                   'A':['A0','A1','A2','A3'],
                   'B':['B0','B1','B2','B3']})
right=pd.DataFrame({'key2':['k0','k1','k2','k3'],
                   'C':['C0','C1','C2','C3'],
                   'D':['D0','D1','D2','D3']})
print(left,right,sep='\n')
res=pd.merge(left,right,left_on='key1',right_on='key2')
print(res)
  key1   A   B
0   k0  A0  B0
1   k1  A1  B1
2   k2  A2  B2
3   k3  A3  B3
  key2   C   D
0   k0  C0  D0
1   k1  C1  D1
2   k2  C2  D2
3   k3  C3  D3
  key1   A   B key2   C   D
0   k0  A0  B0   k0  C0  D0
1   k1  A1  B1   k1  C1  D1
2   k2  A2  B2   k2  C2  D2
3   k3  A3  B3   k3  C3  D3
请按任意键继续. . .

此种情况需要分别指定left_key和right_key是什么。

除此之外,如果你想要让index作为键,可以这样做:

import pandas as pd
import numpy as np
left=pd.DataFrame({'key1':['k0','k1','k2','k3'],
                   'A':['A0','A1','A2','A3'],
                   'B':['B0','B1','B2','B3']})
right=pd.DataFrame({'key2':['k0','k1','k2','k3'],
                   'C':['C0','C1','C2','C3'],
                   'D':['D0','D1','D2','D3']})
print(left,right,sep='\n')
res=pd.merge(left,right,left_index=True,right_index=True)
print(res)

让left_index和right_index均为True即可。

如果两个数据有相同的列名但意思并不相同,合并后应做一些标识以便区分两者,可以这样做:

import pandas as pd
import numpy as np
boys=pd.DataFrame({'k':['k0','k1','k2'],'age':[1,3,3]})
girls=pd.DataFrame({'k':['k0','k1','k2'],'age':[3,2,4]})
res=pd.merge(boys,girls,on='k',suffixes=['_boys','_girls'],how='outer')
#两个age不同,不能合并,这时需要在age后加上一些后缀
print(res)

suffixes可以实现在原列名后方加入一些后缀的功能。

您好!对于合并文件,Python中的Pandas库是非常强大且常用的工具。您可以使用Pandas中的`concat`、`merge`或`join`函数来实现合并操作。 如果您要合并多个具有相同结构的文件,可以使用`concat`函数。下面是一个示例代码: ```python import pandas as pd # 读取要合并的文件 df1 = pd.read_csv('file1.csv') df2 = pd.read_csv('file2.csv') # 使用concat函数合并数据框 merged_df = pd.concat([df1, df2]) # 将合并后的数据框保存到新文件 merged_df.to_csv('merged_file.csv', index=False) ``` 如果您要根据某些列的值将两个或多个文件进行合并,可以使用`merge`函数。下面是一个示例代码: ```python import pandas as pd # 读取要合并的文件 df1 = pd.read_csv('file1.csv') df2 = pd.read_csv('file2.csv') # 使用merge函数合并数据框 merged_df = pd.merge(df1, df2, on='column_name') # 将合并后的数据框保存到新文件 merged_df.to_csv('merged_file.csv', index=False) ``` 在这个示例中,`column_name`是用于合并的列名。 此外,如果您要根据索引值合并文件,可以使用`join`函数。下面是一个示例代码: ```python import pandas as pd # 读取要合并的文件 df1 = pd.read_csv('file1.csv') df2 = pd.read_csv('file2.csv') # 使用join函数合并数据框 merged_df = df1.join(df2, lsuffix='_left', rsuffix='_right') # 将合并后的数据框保存到新文件 merged_df.to_csv('merged_file.csv', index=False) ``` 在这个示例中,`lsuffix`和`rsuffix`用于在列名冲突时添加后缀以区分。 以上是三种常用的合并文件的方法。根据您的具体需求,选择适合的方法进行合并操作即可。希望能对您有所帮助!如果您有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C.L.L

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

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

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

打赏作者

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

抵扣说明:

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

余额充值