【问题标题】:Reading space delimited file in Python/Pandas with missing values在 Python/Pandas 中读取带有缺失值的空格分隔文件
【发布时间】:2013-08-01 15:01:30
【问题描述】:

我正在尝试使用来自 panda 的 read_csv 在 Python 中读取以空格分隔的文件。 它通过指定分隔符 =“”来工作。当列中存在某些缺失值时会出现问题,因为它通过将缺失值视为分隔符来忽略缺失值。

有没有办法解决这个问题?

1600    1141.0000  020006        600    1141.0000    69.0000   OAUC     0.0000   
   1    1070.5000  020032          1    1070.5000   400.0000            0.0000

您可以看到值 OAUC 的列中存在缺失值。 列之间的间距不均匀,这使其变得更加困难。此外,列是固定的,因此可能会发现缺少某些值,但还无法找出缺少的值。

【问题讨论】:

  • 你说列之间的间距不均匀,但是当缺少一个时,值之间并不总是有更多的空间。
  • 我建议先使用命令行工具或 python 清理此文件,然后再尝试将其作为结构化数据读取。 (emacs org 模式会创造奇迹!)你试过pandas.read_fwf 来读取固定宽度的文件吗?
  • @Justin 是的,我确实尝试过使用 pandas.read_fwf 但所有列都没有固定宽度,特别是带有数字的列,正如您在第一列中看到的那样,值可以是 1600或 1 或 1600000。
  • 但每列的末端对齐,因此您可以选择最大宽度小于到下一个非空格字符的距离。但是,事先在文件上使用一些命令行工具或文本编辑器会更干净,恕我直言

标签: python pandas whitespace missing-data


【解决方案1】:

我同意贾斯汀的观点,即首先清理它是确保正确处理它的最佳方法。如果您可以浏览结果以验证质量控制,那么在这种情况下,这种 hack 可能会完成工作。

pd.read_csv(header=None, sep='\s{1, 7}')

我再说一遍,这不是一个好主意。如果您只想加载一个较小的数据集,它会完成这项工作。但如果您无法验证它是否有效,最好使用 read_fwf 并仔细指定 colspecs,或者按照 Justin 的建议清理文件。

【讨论】:

  • 我觉得你也可以用'\s{1, 7}',不过还是……:s
  • 很抱歉打扰,但我对正则表达式并不是很熟悉。 '\s\s?\s?\s?\s?\s?\s?' 是什么意思真的有意义吗?
  • 哈哈哈......我可能应该羞于向世界展示我微薄的正则表达式。让我编辑一下……
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2012-09-12
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
相关资源
最近更新 更多