如何处理熊猫中的NaN值(来自CSV文件)?

时间:2019-09-03 19:23:00

标签: python pandas csv nan

我有一个相当大的csv文件,其中填充了从机器进行材料测试(压缩测试)获得的数据。数据的标头是Time,Force,Stroke,由于样本大小,它们重复了10次,因此最后一组标头是Time.10,Force.10,Stroke.10。由于实验的性质,并不是所有的列都一样长(有些是近似的,比其他的长2000行)。当我使用熊猫将文件导入我的IDE(spyder或jupyter)时,csv文件中空行中的所有单元格都标记为NaN。问题是...我无法在具有NaN值的列内或列之间进行任何数学运算,因为它们被视为str。我在几乎所有论坛上都尝试了最推荐的解决方案; .fillna(),dropna(),replace()和interpolate()。提到的方法有效,但仅在视觉上有效,例如df.fillna(0)将所有NaN值替换为0,但是当我尝试例如在列中找到最大值,我仍然收到错误消息,指出我的列中有字符串(在'float'和'str'的实例之间不支持TypeError:'>')。该问题是由NaN值引起的,原因是100%是因为csv文件中的空单元格所致,因为我已将一个csv文件导入到所有具有相同长度(无空单元格)且没有问题的列中。如果有人对我坚持了超过2周的问题有任何解决方案(不必在熊猫内,只需在python中),我将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试使用 na_filter = False read_csv()。 这至少应防止将“空”源单元格设置为 NaN

但是请注意:

  • 此类“空”单元格可以包含一个空字符串作为内容,
  • 每个包含至少一个此类单元格的列的类型为 object (不是数字)
  • 这样(暂时)他们就不能参与任何数字 操作。

因此,很可能在 read_csv()之后,您应该:

  • 将此类空字符串替换为 0 (或任何数字值)
  • 调用 to_numeric(...)更改 object 中每一列的类型 在每种情况下都适合任何数字类型。