我想我误解了read_csv的用意.如果我有一个'j'文件
# notes
a,b,c
# more notes
1,2,3
Run Code Online (Sandbox Code Playgroud)
我怎么能pandas.read_csv这个文件,跳过任何'#'评论的行?我在帮助'注释'中看到不支持行,但它表示应该返回一个空行.我看到一个错误
df = pandas.read_csv('j', comment='#')
Run Code Online (Sandbox Code Playgroud)
CParserError:标记数据时出错.C错误:第2行预期有1个字段,见3
我现在在
In [15]: pandas.__version__
Out[15]: '0.12.0rc1'
Run Code Online (Sandbox Code Playgroud)
版本'0.12.0-199-g4c8ad82':
In [43]: df = pandas.read_csv('j', comment='#', header=None)
Run Code Online (Sandbox Code Playgroud)
CParserError:标记数据时出错.C错误:第2行预期有1个字段,见3
hli*_*117 28
所以我相信最新版本的pandas(版本0.16.0),你可以将comment='#'参数输入pd.read_csv,这应该跳过注释掉的行.
这些github问题表明你可以这样做:
请参阅以下文档read_csv:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
And*_*den 11
一种解决方法是指定省略以忽略前几个条目:
In [11]: s = '# notes\na,b,c\n# more notes\n1,2,3'
In [12]: pd.read_csv(StringIO(s), sep=',', comment='#', skiprows=1)
Out[12]:
a b c
0 NaN NaN NaN
1 1 2 3
Run Code Online (Sandbox Code Playgroud)
否则read_csv会有点困惑:
In [13]: pd.read_csv(StringIO(s), sep=',', comment='#')
Out[13]:
Unnamed: 0
a b c
NaN NaN NaN
1 2 3
Run Code Online (Sandbox Code Playgroud)
这似乎是0.12.0中的情况,我已经提交了一份错误报告.
正如Viktor所指出的,你可以在事后使用dropna删除NaN ......(最近有一个公开的问题是完全忽略注释行):
In [14]: pd.read_csv(StringIO(s2), comment='#', sep=',').dropna(how='all')
Out[14]:
a b c
1 1 2 3
Run Code Online (Sandbox Code Playgroud)
注意:默认索引将"放弃"缺少数据的事实.
我使用的是 Pandas 版本 0.13.1,这个comments-in-csv问题仍然困扰着我。
这是我目前的解决方法:
def read_csv(filename, comment='#', sep=','):
lines = "".join([line for line in open(filename)
if not line.startswith(comment)])
return pd.read_csv(StringIO(lines), sep=sep)
Run Code Online (Sandbox Code Playgroud)
否则pd.read_csv(filename, comment='#')我得到
pandas.parser.CParserError:标记数据时出错。C 错误:第 16 行应有 1 个字段,但看到了 3 个字段。