Произошло исключение: TypeError 'in <string>' требует строки в качестве левого операнда, а не серии - PullRequest
1 голос
/ 28 мая 2020

Я работаю с Pandas в python У меня есть 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

Не уверен, что делаю неправильно.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

В вашем коде df2['Employee_id'] in x, x - это строка, а df2['Employee_id'] - это серия pandas. 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
1 голос
/ 28 мая 2020

Используйте df.merge:

In [79]: df = df1.merge(df2, on='Employee_id') 

In [80]: df
Out[80]: 
   Names Employee_id Leader Supervisor
0   John         123              Nick
1   Jack         124              Jeff
2  Frank         125              Nick
3   Mike         126              Jeff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...