【问题标题】:How to skip an unknown number of empty lines before header on pandas.read_csv?如何在 pandas.read_csv 的标题之前跳过未知数量的空行?
【发布时间】:2017-01-10 21:26:26
【问题描述】:

我想从标题不在第一行的 csv 文件中读取数据帧。例如:

In [1]: import pandas as pd

In [2]: import io

In [3]: temp=u"""#Comment 1
   ...: #Comment 2
   ...: 
   ...: #The previous line is empty
   ...: Header1|Header2|Header3
   ...: 1|2|3
   ...: 4|5|6
   ...: 7|8|9"""

In [4]: df = pd.read_csv(io.StringIO(temp), sep="|", comment="#", 
   ...:                  skiprows=4).dropna()

In [5]: df
Out[5]: 
   Header1  Header2  Header3
0        1        2        3
1        4        5        6
2        7        8        9

[3 rows x 3 columns]

上面代码的问题是我现在不知道在标题之前会有多少行,因此我不能像这里那样使用skiprows=4

我知道我可以遍历文件,就像问题 Read pandas dataframe from csv beginning with non-fix header 中一样。

我正在寻找一个更简单的解决方案,例如让pandas.read_csv 忽略任何空行并将第一个非空行作为标题。

【问题讨论】:

  • 抱歉,pd.read_csv(io.StringIO(temp), sep="|", comment="#") 不起作用?
  • 不,注释行被翻译成空行,不会被忽略。
  • 会不会是版本问题? skip_blank_lines=True 是 0.18.1 中的默认值。
  • 当我使用pd.read_csv(io.StringIO(temp), sep="|", comment="#") 运行您的示例时,它的工作方式与您在所需输出中描述的完全一样。

标签: python csv pandas file-io data-import


【解决方案1】:

你需要设置skip_blank_lines=True

df = pd.read_csv(io.StringIO(temp), sep="|", comment="#", skip_blank_lines=True).dropna()

【讨论】:

  • 谢谢。我怀疑应该存在这样的选项,甚至检查 read_csv 帮助。我没有找到,因为我使用的是 pandas 0.13。我会努力更新的。
猜你喜欢
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 2015-12-20
  • 2019-02-08
  • 2011-04-10
  • 2011-03-04
  • 2014-12-18
相关资源
最近更新 更多