合并列1中的键上的两个csv文件

时间:2019-07-11 06:32:05

标签: python pandas merge

我正在尝试使用外部联接进行合并(合并),以使结果包含ID为0列的行以及两个文件中的所有列。 我的文件在第一行包含标题。

我尝试了很多变体,但是在抱怨钥匙的过程中我仍然遇到错误。尽管stackoverflow中有很多示例,但都没有给出有关要使用的基础方法的答案。

文件的标题为第一列标题=“代码”,而关键字段实际上为5位数字。我不确定这是否会引起我麻烦。

df1 = pd.read_csv('file1.csv', header=[0], index_col=['Code'])
df2 = pd.read_csv('file2.csv', header=[0], index_col=['Code'])

我已经尝试过

df1 = pd.read_csv('file1.csv', header=[0])
df2 = pd.read_csv('file2.csv', header=[0])

我尝试过...的变化

dfx = pd.merge(df1, df2, left_on=['Code'], right_on=['Code'], how='outer')
dfx = df1[['Code','A-Score']].merge(df2[['Code','B-Score']], how='outer')
df1.merge(df2, on=['Code'], how='outer')
df  = pd.merge(df1[['Code', 'Field1', 'Field2']], df2['Code', 'Field3', 'Field4'], on='Code', how='outer', suffixes=('-A','-B'))
dfx = pd.concat([df1,df2], axis=1, join='outer')

我希望将两个文件中的所有行都合并到一个文件中。两个文件中都没有重复的密钥。

因此,我只想对两个文件执行非常简单的合并,并了解需要哪些参数以及在何处/为什么。

后编辑: 我的问题是,密钥可以解释为数字,因为我可以合并到字符串密钥上。所以,

我该如何 1.将键替换为字符串而不是数字? 2.如何将密钥指定为int64?

1 个答案:

答案 0 :(得分:1)

以下对我有用。

$ cat a.csv
Code,Field1,Field2
1,10,100
2,20,200
3,30,300
5,50,500

$ cat b.csv
Code,Field3
1,11
2,21
4,41
>>> df1 = pd.read_csv('a.csv', header=0, index_col='Code')
>>> df1
      Field1  Field2
Code
1         10     100
2         20     200
3         30     300
5         50     500

>>> df2 = pd.read_csv('b.csv', header=0, index_col='Code')
      Field3
Code
1         11
2         21
4         41
>>> df1.merge(df2, how='outer', on='Code')
      Field1  Field2  Field3
Code
1       10.0   100.0    11.0
2       20.0   200.0    21.0
3       30.0   300.0     NaN
5       50.0   500.0     NaN
4        NaN     NaN    41.0

更新: 根据@OP的注释,没有index_colCode作为数字列:

>>> df1 = pd.read_csv('a.csv', header=[0])
>>> df1
   Code  Field1  Field2
0     1      10     100
1     2      20     200
2     3      30     300
3     5      50     500
>>> df1.dtypes
Code      int64
Field1    int64
Field2    int64
dtype: object

>>> df2 = pd.read_csv('b.csv', header=[0])
>>> df2
   Code  Field3
0     1      11
1     2      21
2     4      41
>>> df2.dtypes
Code      int64
Field3    int64
dtype: object

pd.merge(df1, df2, on='Code', how='outer')
Out[266]:
   Code  Field1  Field2  Field3
0     1    10.0   100.0    11.0
1     2    20.0   200.0    21.0
2     3    30.0   300.0     NaN
3     5    50.0   500.0     NaN
4     4     NaN     NaN    41.0