熊猫合并用空值填充新数据框
Posted
技术标签:
【中文标题】熊猫合并用空值填充新数据框【英文标题】:Pandas merge filling new dataframe with null values 【发布时间】:2019-11-30 21:42:30 【问题描述】:我正在尝试合并两个数据框:
第一个数据帧control
填充有 INTEGERS/STRINGS
左边的数据框一起填充了 INTEGERS/LISTS。
当我使用 pandas 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
【问题讨论】:
请提供一些示例数据。 当您执行内部联接how='inner'
时,您会获得任何价值吗?可能是 id 不匹配。
@iuvbio 添加了一些示例代码
@minanmafi 您应该使用pd.merge(control, together, on="zip_code", how="inner")
检查您是否得到任何结果并将其添加到问题中。如果没有,那么您的 zip_code
值实际上并不相同。
请提供control.zip_code.dtype
和together.zip_code.dtype
的输出
【参考方案1】:
我认为您在这里发生了一些事情。当您说左侧数据框时,我假设您的意思是它应该是左侧连接的右侧?您不是说样本中的“together”在左侧吗?
我认为可以安全地假设您在“together”中的 zip_code 是字符串而不是“int”。您得到的是 NaN,因为它们在 2 个数据帧中不匹配,例如 47283 不等于“47283”。
另外,如果它是你想要的左连接并且一起在左边,你应该有 1 个 NaN 付款,因为如果它们是相同的数据类型,你只有 2 个匹配的 zip_codes。
如果您想控制左侧(我想您会这样做),我建议您这样做:
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 不在“together”数据帧中。
【讨论】:
【参考方案2】:如果每个数据帧的 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 在两个数据帧中具有相同的类型。
【讨论】:
以上是关于熊猫合并用空值填充新数据框的主要内容,如果未能解决你的问题,请参考以下文章