Pandas筛选Adult数据集Male行返回空DataFrame的原因排查
排查Pandas筛选Male行返回空DataFrame的常见原因
嘿,作为过来人太懂这种新手困惑了!你用df[ df['sex'] == 'Male' ]筛选Adult数据集里的男性行,结果只返回带列名的空DataFrame,大概率是这几个小坑在搞鬼,咱们一步步排查:
前后空格或隐藏空白字符:Adult数据集的原始数据里,
sex列的取值可能带了看不见的空格,比如' Male'(前面有空格)或者'Male '(后面有空格),甚至是制表符这类隐藏字符。你可以先打印列的唯一值确认:print(df['sex'].unique())如果输出里看到带空格的版本,先清理掉空格再筛选:
df['sex'] = df['sex'].str.strip() df_male = df[df['sex'] == 'Male']大小写不匹配:说不定数据集里的男性取值是全小写的
'male',而你用的是首字母大写的'Male'。同样用df['sex'].unique()就能一眼看出来。解决办法要么改成匹配的大小写:df_male = df[df['sex'] == 'male']要么用不区分大小写的筛选(更稳妥):
df_male = df[df['sex'].str.lower() == 'male']列名拼写错误:别笑,新手很容易犯这个!你写的是
'sex',但说不定数据集里的列名是'Sex'(首字母大写)或者'gender'?先确认所有列名:print(df.columns)要是列名不对,改成正确的就行。
数据类型不匹配:比如
sex列是分类(category)类型,但分类里的取值和你写的'Male'不一致?先查看列类型:print(df['sex'].dtype)如果是category,再看所有类别:
print(df['sex'].cat.categories)要是类别里没有
'Male',那肯定筛不到数据。
最后给个小技巧:先看一下sex列的取值分布,能快速判断有没有你要的'Male':
print(df['sex'].value_counts())
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

