【问题标题】:After creating a dataframe from an excel file, some columns are not readable by pandas functions从 excel 文件创建数据框后,熊猫函数无法读取某些列
【发布时间】: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 文件中的两列有些不同,我无法弄清楚。我尝试过的事情:

  1. 从数据框字符串中删除所有空格:

    df.applymap(lambda x: x.strip() if isinstance(x, str) else x)

  2. 将格式从好的列复制到excel中的坏列,重新保存,重新运行。

  3. 从 .xls 转换为 .xlsx,然后再转换回来

  4. 转换为 csv 文件,然后从该 csv 文件转换为数据帧。

  5. 从 excel 文件的所有列中删除所有格式。

  6. Excel 文件中我能想到的每一件事。

工作效率太低的事情:

  1. 在 Excel 文件的“SPED”列中输入“Male”,然后将该单元格从“SPED”列复制到“Gender”列。
  2. 复制“SPED”列,将其重命名为“Gender”,然后在该列中手动输入“Male,Female...”。 (请上帝不要。)

excel 文件很大,是从另一个我无权访问/源代码的程序输出的。我怎样才能使“性别”列像“SPED”列一样???问题可能出在 Excel 文档中。请帮忙!

【问题讨论】:

  • 您是否尝试过选择 df[df['Gender'] == 'Male'] 条件应该为真的所有行,并查看输出是什么?选择条件应该为假的所有行是否相同?这将帮助您检查选择逻辑(和 df 数据)是否已从您的 excel 中正确加载?
  • 感谢您的建议,但这基本上以不同的方式检查同一件事。您的第一种方法返回一个空数据框,第二种方法返回所有行。对于“女性”,我也得到了相同的结果,因为它无法识别列中的字符串。但是当我打印数据框时,该列就在那里,并且“性别”值的数据类型是字符串。我正在失去理智。太令人沮丧了。
  • 您是否检查过性别没有前导或尾随空格或不可打印字符?如果转换为 csv 没有解决它,这似乎不是一个 excel 问题。
  • 再次感谢,但是是的,我剥夺了一切。在原帖中提到。

标签: python excel pandas dataframe


【解决方案1】:

你可以试试这样的:

np.where(df['Gender'].str.contains('Female'), 1, 0)

【讨论】:

  • 这是一个很好的解决方案并且有效!非常感谢。我的工具箱中没有“.contains”。但是,对于那些感兴趣的人来说,这些 Excel 文件列中的数据问题从未得到解决。
猜你喜欢
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 2019-01-26
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多