id name gender
0 13 John Smith 0
1 46 Jim Jeffries 2
2 75 Jennifer Johnson 0
3 37 Sam Adams 0
4 24 John Cleese 0
5 17 Taika Waititi 0
У меня есть много имен людей и полов в df, взятых из db актеров фильма. Пол был назначен 1 (женщина), 2 (мужчина) или 0 (не указаны). Я хотел бы прочесать и бездушно принять пол по имени. Имена будут храниться в списке и заполняться вручную. Возможно, я найду кого-нибудь с гендерно-неспецифическим именем по идентификатору и выясню сам, являются ли они мужчиной / женщиной, я бы тоже хотел сделать это:
m_names = ['John', ...]
f_names = ['Jennifer', ...]
m_ids = ['37', ...]
f_ids = ['', ...]
У меня есть полный контроль над циклами и np.where, но я не могу понять, как пройти через этот df, строка за строкой.
Если бы то, что было сказано выше, то, что я хочу вернуть, выглядело бы так:
for index, row in df.iterrows():
if row['gender'] == 0:
if row['name'].str.contains(' |'.join(f_names)) or row['id'].str.contains('|'.join(f_ids)):
return 1
elif row['name'].str.contains(' |'.join(m_names)) or row['id'].str.contains('|'.join(m_ids)):
return 2
print(df)
id name gender
0 13 John Smith 2
1 46 Jim Jeffries 2
2 75 Jennifer Johnson 1
3 37 Sam Adams 2
4 24 John Cleese 2
5 17 Taika Waititi 0
Обратите внимание на пробел перед '|' в условии для имен, чтобы избежать захвата любых частей фамилий.
В этот момент я сталкиваюсь с тем, как я отформатировал свои операторы if. Python не любит мое форматирование и говорит, что мои «возвраты» являются «внешней функцией». Если я изменю это на
row['gender'] = #
У меня возникают проблемы с юникодом, и я использую 'str' и 'contains'.