首页 > 解决方案 > 发生异常:TypeError 'in' 需要字符串作为左操作数,而不是 Series

问题描述

我在 python 中使用 Pandas 我有 2 个数据框,我试图将信息从一个拉到另一个。这是代码的示例。

    import pandas as pd

employees = {'Names': ['John','Jack','Frank','Mike'],
             'Employee_id': ['123', '124', '125', '126'],
             'Leader': ['','','','']}

df1 = pd.DataFrame(employees, columns = ['Names', 'Employee_id', 'Leader'])

print(df1)

leader = {'Employee_id': ['123', '124', '125', '126'],
          'Supervisor': ['Nick', 'Jeff', 'Nick', 'Jeff']}

df2 = pd.DataFrame(leader, columns = ['Employee_id', 'Supervisor'])
print(df2)

df1['Leader'] = df1['Employee_id'].map(lambda x: df2['Supervisor'] if df2['Employee_id'] in x else "")

print(df1)

这是错误。

Exception has occurred: TypeError
'in <string>' requires string as left operand, not Series

不知道我做错了什么。

感谢您的帮助。

标签: pythonpandas

解决方案


在您的代码df2['Employee_id'] in x中,x是一个字符串,df2['Employee_id']是一个熊猫系列。Python 不知道如何检查series in big_string操作。更具体地说,它只能检查some_string in big_string.

在您的情况下,您可以使用map一系列:

df1['Leader'] = df1['Employee_id'].map(df2.set_index('Employee_id')['Supervisor'])

输出:

   Names Employee_id Leader
0   John         123   Nick
1   Jack         124   Jeff
2  Frank         125   Nick
3   Mike         126   Jeff

推荐阅读