【发布时间】:2021-05-22 21:01:53
【问题描述】:
我已经从 Excel 文件正确地创建了一个数据框。我正在根据条件创建一个新列,这很有效:
df['sped_bin'] = np.where(df['SPED'] == 'Yes', 0, 1)
print(df['sped_bin'])
0 1
1 1
2 1
3 0
4 1
但是,在同一个 Excel 电子表格中,有些列的值无法识别:
df['gender_bin'] = np.where(df['Gender'] == 'Male', 0, 1)
print(df['gender_bin'])
0 1
1 1
2 1
3 1
4 1
(我知道还有其他方法可以将“是/否”或“性别”转换为二进制。这与我的问题无关。)
excel 文件中的两列有些不同,我无法弄清楚。我尝试过的事情:
-
从数据框字符串中删除所有空格:
df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
-
将格式从好的列复制到excel中的坏列,重新保存,重新运行。
-
从 .xls 转换为 .xlsx,然后再转换回来
-
转换为 csv 文件,然后从该 csv 文件转换为数据帧。
-
从 excel 文件的所有列中删除所有格式。
-
Excel 文件中我能想到的每一件事。
工作效率太低的事情:
- 在 Excel 文件的“SPED”列中输入“Male”,然后将该单元格从“SPED”列复制到“Gender”列。
- 复制“SPED”列,将其重命名为“Gender”,然后在该列中手动输入“Male,Female...”。 (请上帝不要。)
excel 文件很大,是从另一个我无权访问/源代码的程序输出的。我怎样才能使“性别”列像“SPED”列一样???问题可能出在 Excel 文档中。请帮忙!
【问题讨论】:
-
您是否尝试过选择 df[df['Gender'] == 'Male'] 条件应该为真的所有行,并查看输出是什么?选择条件应该为假的所有行是否相同?这将帮助您检查选择逻辑(和 df 数据)是否已从您的 excel 中正确加载?
-
感谢您的建议,但这基本上以不同的方式检查同一件事。您的第一种方法返回一个空数据框,第二种方法返回所有行。对于“女性”,我也得到了相同的结果,因为它无法识别列中的字符串。但是当我打印数据框时,该列就在那里,并且“性别”值的数据类型是字符串。我正在失去理智。太令人沮丧了。
-
您是否检查过性别没有前导或尾随空格或不可打印字符?如果转换为 csv 没有解决它,这似乎不是一个 excel 问题。
-
再次感谢,但是是的,我剥夺了一切。在原帖中提到。
标签: python excel pandas dataframe