仅在函数中使用合并时才出现熊猫键错误
Posted
技术标签:
【中文标题】仅在函数中使用合并时才出现熊猫键错误【英文标题】:pandas key error only when using merge only in a function 【发布时间】:2021-04-17 22:57:43 【问题描述】:我有两个数据框“base_level”和“raw_inventory”,包含以下列:
“base_level”列 -> “a”、“b”、“c”、“inventory_id”...
“raw_inventory”列 -> “1”、“2”、“3”、“inventoryparentid”、.....
当我如下所示直接使用合并连接时,一切都按预期工作。
level = pd.merge(base_level, raw_inventory, left_on='inventory_id', right_on='inventoryparentid', how='left')
打印(级别)
但是当我在函数中使用它并尝试如下所示调用时
def inv_level ( child_inv, parent_inv, lefton, righton, how ):
level_inv = pd.merge(parent_inv, child_inv, left_on=lefton, right_on=righton, how=how)
return level_inv
level = inv_level(base_level, raw_inv, 'inventory_id', 'inventoryparentid', 'left')
print(level)
它会抛出以下错误
File "C:\temp\env\3.8.6\lib\site-packages\pandas\core\reshape\merge.py", line 652, in __init__
) = self._get_merge_keys()
File "C:\temp\env\3.8.6\lib\site-packages\pandas\core\reshape\merge.py", line 1005, in _get_merge_keys
right_keys.append(right._get_label_or_level_values(rk))
File "C:\temp\env\3.8.6\lib\site-packages\pandas\core\generic.py", line 1563, in _get_label_or_level_values
raise KeyError(key)
KeyError: 'inventoryparentid'
我无法确定可能是什么原因。感谢您提供有关此问题的任何意见。
编辑:
我尝试使用以下示例代码来展示我正在尝试做的事情并且易于理解。我得到同样的错误。
import numpy as np
import pandas as pd
def inv_level ( child_inv, parent_inv, lefton, righton, how ):
level_inv = pd.merge(parent_inv, child_inv, left_on=lefton, right_on=righton, how=how)
return level_inv
def main(event, context):
np.random.seed(0)
# transactions
left = pd.DataFrame('transaction_id': ['A', 'B', 'C', 'D'],
'user_id': ['Peter', 'John', 'John', 'Anna'],
'value': np.random.randn(4),
)
# users
right = pd.DataFrame('new_id': ['Paul', 'Mary', 'John', 'Anna'],
'favorite_color': ['blue', 'blue', 'red',
np.NaN],
)
'''
test = inv_level(left, right, 'user_id', 'new_id', 'left') #left.merge(right, on='user_id', how='left')
The above throws an error
'''
test = pd.merge(left, right, left_on='user_id', right_on='new_id', how='left')
print(test)
if __name__ == "__main__":
main("", "")
错误:
文件“C:\temp\env\3.8.6\lib\site-packages\pandas\core\reshape\merge.py”,第 1005 行,在 _get_merge_keys right_keys.append(right._get_label_or_level_values(rk)) _get_label_or_level_values 中的文件“C:\temp\env\3.8.6\lib\site-packages\pandas\core\generic.py”,第 1563 行 引发 KeyError(键) KeyError: 'new_id'
这是预期的输出:
transaction_id user_id value new_id favorite_color
0 A Peter 1.764052 NaN NaN
1 B John 0.400157 John red
2 C John 0.978738 John red
3 D Anna 2.240893 Anna NaN
谢谢,
【问题讨论】:
检查数据框上的“inventoryparentid”列。 @L.Papadopoulos 感谢您的回复。我确实检查了该列并且它存在。我添加了带有示例数据的小 python 脚本,它有同样的错误。可能有助于理解问题。 你能把想要的输出放上去吗?测试数据框? 【参考方案1】:试试这个:
test = inv_level(left, right, left['user_id'], right['new_id'], 'left')
【讨论】:
感谢您的回复。我试过了,它不是预期的输出。这就是我得到的。 key_0 new_id favorite_color transaction_id user_id value 0 Peter Paul blue NaN NaN NaN 1 John Mary blue C John 0.978738 2 John John red C John 0.978738 3 Anna Anna NaN D Anna 2.240893以上是关于仅在函数中使用合并时才出现熊猫键错误的主要内容,如果未能解决你的问题,请参考以下文章
只有在 Visual Studio 之外运行 EXE 时才会出现发布错误