如何在 pandas.read_csv 的标题之前跳过未知数量的空行?
Posted
技术标签:
【中文标题】如何在 pandas.read_csv 的标题之前跳过未知数量的空行?【英文标题】:How to skip an unknown number of empty lines before header on 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="#")
运行您的示例时,它的工作方式与您在所需输出中描述的完全一样。
【参考方案1】:
你需要设置skip_blank_lines=True
df = pd.read_csv(io.StringIO(temp), sep="|", comment="#", skip_blank_lines=True).dropna()
【讨论】:
谢谢。我怀疑应该存在这样的选项,甚至检查 read_csv 帮助。我没有找到,因为我使用的是 pandas 0.13。我会努力更新的。以上是关于如何在 pandas.read_csv 的标题之前跳过未知数量的空行?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?
如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?
如何使用 pandas.read_csv() 将索引数据读取为字符串?