我正在尝试合并两个数据框:
control
中填充了 INTEGERS / STRINGS 当我使用熊猫merge()
函数时,新数据框用NaN填充正确的数据框,而不是列表
final_dataset = pd.merge(control, together, on="zip_code", how="left")
我希望有一个来自两个原始数据帧的值的新合并数据帧。取而代之的是,在新的数据框中,“控制”数据框中的所有值都是正确的,但“在一起”数据框中的所有列表都是NaN
以下是一些示例数据:
control together
------------------------------- -------------------------------
payment zip_code age zip_code
Rent 94053 [25, 64, 24] 12583
Mortgage 47283 [78. 39, 35] 47283
Rent 25769 [82, 33, 19] 25769
这是最终数据集的样子:
final_dataset
-----------------------------------------------------------
zip_code payment age
47283 Mortgage NaN
25769 Rent NaN
答案 0 :(得分:1)
我认为您正在做一些事情。当您说左边的数据框时,我假设您是说它应该是左边的连接右边?您不是说样本的左侧是“一起”吗?
我认为可以安全地假设“ together”中的邮政编码是字符串而不是“ int”。您正在获取NaN,因为它们在2个数据帧中不匹配,示例47283不等于'47283'。
此外,如果您希望将其作为左联接,同时将其作为左联接,那么您应该在付款时获得1个NaN,因为如果它们是相同的数据类型,则只有2个匹配的邮政编码。
如果您想在左侧进行控制(我想这样做),我将建议您这样做:
control = pd.DataFrame({
'payment':['Rent','Mortgage','Rent'],
'zip_code':[94053,47283,25769]
})
together = pd.DataFrame({
'age':[[25,64,24],[78, 39,35],[82,33,19]],
'zip_code':[12583,47283,25769]
})
control.merge(together,on='zip_code',how='left')
这将为您提供以下结果:
payment zip_code age
0 Rent 94053 NaN
1 Mortgage 47283 [78, 39, 35]
2 Rent 25769 [82, 33, 19]
您会看到您的年龄为1 NaN,因为94053不在“一起”数据框中。
答案 1 :(得分:0)
如果每个数据帧的zip_code列具有不同的类型,则可能发生这种情况,其中一个可能是int64,另一个是对象,例如:
a = pd.DataFrame([
{"colA": 1, "key": "1"},
{"colA": 2, "key": "2"},
{"colA": 3, "key": "3"}
])
b = pd.DataFrame([
{"colB": [25, 64, 24], "key": 1},
{"colB": [25, 64, 24], "key": 2},
{"colB": [25, 64, 24], "key": 4}
])
如果合并这两个数据框,您将得到
res = pd.merge(a, b, on="key", how='left')
colA key colB
0 1 1 NaN
1 2 2 NaN
2 3 3 NaN
因此,您需要确保zip_code在两个数据帧中具有相同的类型。