我想修改数据集中的一列,其中包含以逗号分隔的一组人的性别列表。因此,条目可以是“男性,男性”或“女性,女性,女性,男性”,也可以只是“女性”。我想处理数据,以便以后使用sci-kit-learn的目的是“所有男性”,“所有女性”,“多数男性”,“多数女性”。
但是,我是数据科学的新手,除了将每个字符串分成“ male”和“ female”子字符串,计算出现次数,然后根据结果。我的数据集大约有60万个样本,因此蛮力似乎不是一个好主意。是否有使用Python和Numpy和/或Pandas的更好方法?
答案 0 :(得分:1)
如果我对您的理解正确-您正在尝试通过“性别”列创建一个新的分类功能。
该列可能包含4个值-所有男性,所有女性,多数男性和多数女性。 (我假设男性占多数指男性数>女性数)
def categorical_gender(genders):
genders_split = genders.split(",")
male_count = genders_split.count("male")
female_count = genders_split.count("female")
if male_count == len(genders_split):
return "all male"
if female_count == len(genders_split):
return "all female"
if male_count>female_count:
return "majority male"
if male_count<female_count:
return "majority female"
else:
return "equal males and females"
您现在将此功能应用于“性别”列上的数据框。
df["categorical_gender"] = df.genders.apply(categorical_gender)
P.S:关于速度的关注。你应该没事的。熊猫可以非常有效地处理60万行的字符串操作。但是,您可以使用dask对上述套用操作进行多处理。尽管对于这种情况来说这是一个过大的杀伤力。