我正在尝试使用外部联接进行合并(合并),以使结果包含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?
答案 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_col
和Code
作为数字列:
>>> 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