使用自定义列合并两个csv文件

时间:2016-06-25 06:03:33

标签: python csv pandas dataframe merge

我有两个csv文件: TEST1

A   B 
1   a
2   b
3   c
4   d
5   e

TEST2

A   C   D   B
3   x   25  101
2   y   0.35    11
1   z   0.45    111
6   k   0.55    1101
7   l   0.65    1010

我想在= A上合并它们但我只需要在最终文件中的列test1.A,B和test2.D,B。由于这两个文件都具有相同的列名B,因此需要在连接时重命名。输出文件应如下所示:

A   B   D       B1
1   a   0.45    1110
2   b   0.35    1010
3   c   25      1011
4   d       
5   e   0.55    
6       0.65    1000
7               1111

其中B1对应于表2中的B列。 test1和test2中的两个B列都不相同。

import pandas

csv1 = pandas.read_csv('test1.csv',dtype='unicode')
csv2 = pandas.read_csv('test2.csv',dtype='unicode')
merged = pandas.merge(csv1[list('AB')],csv2[list('DB')], on='A',how="outer")
merged.to_csv("outputtest.csv", index=False)

这给了我错误:

  

KeyError:“['B']不在索引”

1 个答案:

答案 0 :(得分:1)

您可以在Cdropcsv2,然后使用参数suffixes mergestringmerged = pd.merge(csv1, csv2.drop('C', axis=1), on='A', how="outer", suffixes=('','1')).fillna('') print (merged) A B D B1 0 1.0 a 0.45 111 1 2.0 b 0.35 11 2 3.0 c 25 101 3 4.0 d 4 5.0 e 5 6.0 0.55 1101 6 7.0 0.65 1010

csv

如果在A中有多列,则可以在此解决方案列merged = pd.merge(csv1[['A','B']], csv2[['A','D','B']], on='A', how="outer", suffixes=('','1')).fillna('') print (merged) A B D B1 0 1.0 a 0.45 111 1 2.0 b 0.35 11 2 3.0 c 25 101 3 4.0 d 4 5.0 e 5 6.0 0.55 1101 6 7.0 0.65 1010 中使用仅需要子集的列和需要用于连接的列:

merged = pd.merge(csv1[list('AB')],
                  csv2[list('ADB')], 
                  on='A',
                  how="outer", 
                  suffixes=('','1')).fillna('')
print (merged)
     A  B     D    B1
0  1.0  a  0.45   111
1  2.0  b  0.35    11
2  3.0  c    25   101
3  4.0  d            
4  5.0  e            
5  6.0     0.55  1101
6  7.0     0.65  1010

或者:

select distinct status from t_table where file_id = 310012