【问题标题】:pandas read_csv. How to ignore delimiter before line break熊猫 read_csv。如何在换行符之前忽略分隔符
【发布时间】:2019-12-13 17:48:41
【问题描述】:

我正在读取一个带有数值的文件。

data = pd.read_csv('data.dat', sep=' ', header=None)

在文本文件中,每一行都以空格结尾,因此 pandas 等待一个不存在的值,并在每一行的末尾添加一个“nan”。 例如:

2.343 4.234

读作: [2.343, 4.234, 南]

我可以使用, usecols = [0 1] 避免它,但我更喜欢更通用的解决方案

【问题讨论】:

  • 你为什么不清理你的 csv?如果您的格式不规则,您只能期待这么多。
  • 我同意@juanpa.arrivillaga 的观点,清理 CSV 比让你的程序处理所有这些不同的事情要好得多。出于好奇,您的数据是什么样的,您将其用于什么目的?
  • 它们是神经网络模拟输出。一行有时间,另一行有神经元索引。既然你提到我可以在 C++ 中更改我的代码以避免多余的空间。

标签: python pandas file


【解决方案1】:

您可以在 sep 参数中使用正则表达式。

除了将分隔符指定为 一个 空格外,您还可以要求它使用任意数量的空格作为分隔符,直到找到下一个值。您可以使用正则表达式\s+

data = pd.read_csv('data.dat', sep='\s+', header=None)

【讨论】:

  • 我不明白这是如何解决问题的。最后一个尾随空格将被识别为分隔符,对吧?
  • 它解决了。我不知道为什么,因为正如@jorijnsmit 指出的那样,额外的空间应该被视为分隔符。但我查了一下,“nan”已经不存在了。
  • @jorijnsmit 不,它不会被识别为分隔符。发生的情况是有一个空格,然后是一个换行符,甚至可能是多个空格。第一个空格被理解为分隔符,然后下一个字符是创建 NaN 的内容。如果所有的空白字符都被识别为分隔符,那么解释器会理解该行已经结束并开始读取下一行。
  • Aaaah 换行符也被识别为空白字符!非常好。
【解决方案2】:

使用usecols 指定要读取的列将是一种更简洁的方法,或者您可以在读取数据后删除该列,但这会带来读取您不需要的数据的开销。通用方法将要求您创建一个正则表达式解析器,这将更加耗时且更加混乱。

【讨论】:

    【解决方案3】:

    您可以将 csv 文件中的分隔符更改为空格以外的其他内容吗?因为这可能是每行以 nan 结尾的原因。 如果你使用:

        data = pd.read_csv('data.dat', sep=',', header=None)
    

    例如,无需清理数据即可解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2017-01-25
      • 2017-05-07
      • 2012-11-23
      • 2021-08-22
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多