熊猫合并以空值填充新数据框

时间:2019-07-22 21:37:08

标签: python pandas dataframe merge null

我正在尝试合并两个数据框:

  • 第一个数据框control中填充了 INTEGERS / STRINGS
  • 左侧的数据框一起用 INTEGERS / LISTS (填充器/列表)填充。

当我使用熊猫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                                

2 个答案:

答案 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在两个数据帧中具有相同的类型。