问题 Python Pandas:如何在读取文件时跳过列?


我的表格格式如下:

foo - bar - 10 2e-5 0.0 some information
quz - baz - 4 1e-2 1 some other description in here

当我用熊猫打开它时:

a = pd.read_table("file", header=None, sep=" ")

它告诉我:

CParserError: Error tokenizing data. C error: Expected 9 fields in line 2, saw 12

我基本上喜欢的是类似于skiprows选项的东西,它允许我做类似的事情:

a = pd.read_table("file", header=None, sep=" ", skipcolumns=[8:])

我知道我可以用这个表重新格式化 awk,但我想知道是否存在熊猫解决方案。

谢谢。


12955
2018-06-23 12:51


起源



答案:


usecols 参数允许您选择要使用的列:

a = pd.read_table("file", header=None, sep=" ", usecols=range(8))

但是,要接受不规则的列数,您还需要使用 engine='python'


9
2018-06-23 13:02



不,这不起作用,错误仍然存​​在,这里的问题是强制解析器只使用所需的列而不会因格式错误而引发错误 - EdChum
我尝试使用usecols,它不起作用@EdChum提到。 - jrjc
@EdChum,啊,好的,在这种情况下,这可能是重复的: stackoverflow.com/questions/15242746/... - otus
@otus是的,从默认的工作中将引擎更改为python,你应该将其作为编辑发布 - EdChum
你是否设法使它成功 engine="python"?它的工作没有 usecols,但是,DataFrame很奇怪 - jrjc


答案:


usecols 参数允许您选择要使用的列:

a = pd.read_table("file", header=None, sep=" ", usecols=range(8))

但是,要接受不规则的列数,您还需要使用 engine='python'


9
2018-06-23 13:02



不,这不起作用,错误仍然存​​在,这里的问题是强制解析器只使用所需的列而不会因格式错误而引发错误 - EdChum
我尝试使用usecols,它不起作用@EdChum提到。 - jrjc
@EdChum,啊,好的,在这种情况下,这可能是重复的: stackoverflow.com/questions/15242746/... - otus
@otus是的,从默认的工作中将引擎更改为python,你应该将其作为编辑发布 - EdChum
你是否设法使它成功 engine="python"?它的工作没有 usecols,但是,DataFrame很奇怪 - jrjc


如果您使用的是Linux / OS X / Windows Cygwin,则应该能够按如下方式准备文件:

cat your_file |  cut -d' ' -f1,2,3,4,5,6,7 > out.file

然后在Python中:

a = pd.read_table("out.file", header=None, sep=" ")

例:

输入:

foo - bar - 10 2e-5 0.0 some information
quz - baz - 4 1e-2 1 some other description in here

输出:

foo - bar - 10 2e-5 0.0
quz - baz - 4 1e-2 1

您可以在命令行上手动运行此命令,或者只需使用Python在Python中调用它 subprocess 模


0
2018-06-23 13:30



我知道,我想知道使用Pandas的解决方案。 - jrjc