【发布时间】:2025-12-10 17:00:01
【问题描述】:
我在更改我的 pandas 数据框(大约 51000x11 大小)的一列中的数据时遇到问题。
import pandas as pd
import numpy as np
df_answers.head(10)
set(df_answers['Gender'])
“性别”列中有 29 种答案
{'Female',
'Female; Gender non-conforming',
'Female; Gender non-conforming; Other',
'Female; Other',
'Female; Transgender',
'Female; Transgender; Gender non-conforming',
'Female; Transgender; Gender non-conforming; Other',
'Female; Transgender; Other',
'Gender non-conforming',
'Gender non-conforming; Other',
'Male',
'Male; Female',
'Male; Female; Gender non-conforming',
'Male; Female; Gender non-conforming; Other',
'Male; Female; Other',
'Male; Female; Transgender',
'Male; Female; Transgender; Gender non-conforming',
'Male; Female; Transgender; Gender non-conforming; Other',
'Male; Female; Transgender; Other',
'Male; Gender non-conforming',
'Male; Gender non-conforming; Other',
'Male; Other',
'Male; Transgender',
'Male; Transgender; Gender non-conforming',
'Male; Transgender; Other',
'Other',
'Transgender',
'Transgender; Gender non-conforming',
'Transgender; Other',
nan}
我想改变这个烂摊子 - 留下 2 个选项“女性”、“男性”,然后将其他所有内容更改(替换)为“其他”。 不幸的是,我在下面写的函数不起作用 - 我怀疑 .isin() 或 .loc[] 可能有问题,但我不确定。
def change_gender_name():
if (df_answers.loc[~df_answers['Gender'].isin(['Female', 'Male'])]):
df_answers['Gender'] = df_answers['Gender'].str.replace('*', 'Other', regex=True, inplace=True)
else:
pass
change_gender_name()
ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
感谢您的宝贵时间。
我放了一些额外的信息,因为我认为这不是一件容易的事。
当列中的数据等于“女性”、“男性”或“其他”时(里面没有任何附加词),我想保持原样;我想将所有 26 种不同类型的数据更改为“其他”字符串。
'Female'、'Male'、'Other' - 它们是这里面的最终答案 专栏
【问题讨论】:
-
df['new_gender'] = np.where((df['Gender'] != 'Male') | (df['Gender'] != 'Female'), 'Other', df['Gender']) -
把它放在函数内部还是作为代码的独立部分(没有函数)?
-
你不需要函数。只需将其作为自己的行运行即可。
-
df['New_Gender'] = df['Gender'].str.replace('^(?!.*Female)(?!.*Male).*', 'Other')? -
@KrzysztofSobota 你是对的,我在逻辑上犯了一个错误:
df['new_gender'] = np.where(df['Gender'].isin(['Male', 'Female']), df['Gender'], 'Other')