もとのデータが自然言語で書かれているため、lambdaを使うには条件分岐が複雑だったのですが、以下のようにしてはどうでしょうか
python3
1from math import nan
2import pandas as pd
3
4def getGender(x):
5 if not type(x) is str:
6 return "不明"
7
8 if "男性" in x:
9 return "男性"
10 elif "女性" in x:
11 return "女性"
12 else:
13 return "不明"
14
15def getAgeRange(x):
16 if not type(x) is str:
17 return "不明"
18
19 for i in range(1,10):
20 # 半角英数字での入力を仮定
21 # 100代以上は存在しないことを仮定
22 if (str(i*10)+ "代") in x:
23 return str(i*10) + "代"
24 return "不明"
25
26
27def main():
28 df = pd.DataFrame(["40代男性", "20代女性", nan, "男性"], columns=["user"])
29 df['gender']=df['user'].apply(getGender)
30 df['agerange']=df['user'].apply(getAgeRange)
31 print(df)
32 return
33
34if __name__ == '__main__':
35 main()
以下追記
コメント欄ではコードを埋め込めなかったので同じコードを貼っておきます
python3
1
2from math import nan
3import pandas as pd
4
5def main():
6 df = pd.DataFrame(["40代男性", "20代女性", nan, "男性"], columns=["user"])
7 df['gender']=df['user'].apply(lambda x: "不明" if not type(x) is str else ("女性" if "女性" in x else ("不明")))
8 df['agerange']=df['user'].apply(lambda x: "不明" if not type(x) is str else ("10代" if "10代" in x else ("20代" if "20代" in x else ("30代" if "30代" in x else ("40代" if "40代" in x else ("50代" if "50代" in x else ("60代" if "60代" in x else ("70代" if "70代" in x else( "80代" if "80代" in x else ("90代" if "90代" in x else ("100代" if "100代" in x else "不明")))))))))))
9 print(df)
10 return
11
12if __name__ == '__main__':
13 main()