如何强制合并?

时间:2017-12-11 12:51:12

标签: python pandas csv merge

编辑:添加了来自csv文件的输入。此行未合并。

我每周从同一个数据库中提取数据到csv,但最近有奇怪的错误。我有三个关键字段,我无法合并它们。它已经完美地工作了半年,直到它突然停止为某些行工作。

key1是int64,key2对象,key3对象。当我在UltraEdit中查看csv时,键完全相同。

输入:

file1:379002,5930,1068247,7

file2:379002,5930,1068247,9

合并前三个字段。

到目前为止,我已经尝试了df.col.map(str)并剥离了所有六个键上的任何前导零,但它不起作用。当与外部合并时,某些行在右侧df的合并列中具有NaN。

indata1 = pd.read_csv('file1.csv')
indata1['key1'] = indata1['key1'].map(str)
indata1['key2'] = indata1['key2'].map(str)
indata1['key3'] = indata1['key3'].map(str)
indata1['key1'] = [i.lstrip('0') for i in indata1['key1']]
indata1['key2'] = [i.lstrip('0') for i in indata1['key2']]
indata1['key3'] = [i.lstrip('0') for i in indata1['key3']]

indata2 = pd.read_csv('file2.csv')
indata2['key1'] = indata2['key1'].map(str)
indata2['key2'] = indata2['key2'].map(str)
indata2['key3'] = indata2['key3'].map(str)
indata2['key1'] = [i.lstrip('0') for i in indata2['key1']]
indata2['key2'] = [i.lstrip('0') for i in indata2['key2']]
indata2['key3'] = [i.lstrip('0') for i in indata2['key3']]

merged = pd.merge(left = indata1,
                  right = indata2,
                  how = 'outer',
                  on = ('key1', 'key2', 'key3'))

这将从右侧df返回合并中的NaN和正确值。我知道密钥存在于两个数据帧中。有没有其他方法可以让它更健壮?或者对齐dtypes?我迷路了。

0 个答案:

没有答案