如何强制合并?

2021-10-17 17:36:58 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:从csv文件添加输入。此行未合并。你知道吗

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

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

输入:

文件1:37900259301068247,7

文件2:37900259301068247,9

合并前三个字段。你知道吗

我试过了测向列地图(str)并去掉所有六个键上的前导零,但它不起作用。当与outer合并时,某些行在右侧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和正确值。我知道密钥存在于两个数据帧中。有没有别的办法让它更结实?还是对齐数据类型?我迷路了。你知道吗