我有一些关于不同个体性别的数据集。比如,数据集如下所示:
Male
Female
Male and Female
Male
Male
Female
Trans
Unknown
Male and Female
有些人认为自己是男性,有些是女性,有些人认为自己是男性和女性。
现在,我想要做的是在Pandas中创建一个映射
的新列Males to 1,
Females to 2,
Others to 3
我写了一些代码
def gender(x):
if x.str.contains("Male")
return 1
elif x.str.contains("Female")
return 2
elif return 3
df["Gender Values"] = df["Gender"].apply(gender)
但是我收到的错误是函数不包含任何属性。我尝试删除str:
x.contains("Male")
我得到同样的错误
有更好的方法吗?
答案 0 :(得分:6)
您可以使用:
def gender(x):
if "Female" in x and "Male" in x:
return 3
elif "Male" in x:
return 1
elif "Female" in x:
return 2
else: return 4
df["Gender Values"] = df["Gender"].apply(gender)
print (df)
Gender Gender Values
0 Male 1
1 Female 2
2 Male and Female 3
3 Male 1
4 Male 1
5 Female 2
6 Trans 4
7 Unknown 4
8 Male and Female 3
答案 1 :(得分:1)
创建一个映射函数,并使用它来映射值。
def map_identity(identity):
if gender.lower() == 'male':
return 1
elif gender.lower() == 'female':
return 2
else:
return 3
df["B"] = df["A"].map(map_identity)
答案 2 :(得分:0)
如果没有具体要求分别按顺序将1、2、3分别用于男性,女性和其他人,则可以尝试使用Scikit-Learn的LabelEncoder。它将为该列中的每个唯一类别随机分配一个唯一编号。
my $sock = IO::Socket::SSL->new(
PeerAddr => '2.50.44.55:5061',
SSL_fingerprint => 'sha1$CE68626830EAF46482F55CB7FBF4DA1B77889FDD'
) or die $SSL_ERROR;
有关详细信息,您可以查看Label Encoder文档。
希望这会有所帮助!