大熊猫用变量列

时间:2016-11-30 05:06:31

标签: python file pandas multiple-columns

我的档案是这个

    4 7 a a
    s g 6 8 0 d
    g 6 2 1 f 7 9 
    f g 3 
    1 2 4 6 8 9 0

我正在使用pandas以pandas对象的形式保存它。但我收到以下错误
pandas.parser.CParserError: Error tokenizing data. C error: Expected 6 fields in line 3, saw 8

我使用的代码是
file = pd.read_csv("a.txt",dtype = None,delimiter = " ")

有人可以建议将文件包含在内吗?

2 个答案:

答案 0 :(得分:2)

这是单向的。

In [50]: !type temp.csv
4,7,a,a
s,g,6,8,0,d
g,6,2,1,f,7,9
f,g,3
1,2,4,6,8,9,0

将csv读取到列表列表,然后转换为DataFrame。

In [51]: pd.DataFrame([line.strip().split(',') for line in open('temp.csv', 'r')])
Out[51]:
   0  1  2     3     4     5     6
0  4  7  a     a  None  None  None
1  s  g  6     8     0     d  None
2  g  6  2     1     f     7     9
3  f  g  3  None  None  None  None
4  1  2  4     6     8     9     0

答案 1 :(得分:-1)

使用pandas会引发错误,因为函数需要有一定数量的列,在这种情况下为6,但是当它到达第三行时遇到了8.一种处理这种情况的方法是不读取列数多于数据帧第一行的行数。这可以使用error_bad_lines参数完成。这就是文档对error_bad_lines所说的内容:

  

error_bad_lines:boolean,default True包含太多字段的行   (例如,逗号太多的csv行)默认会导致   要引发的异常,并且不会返回任何DataFrame。如果为假,   然后这些“坏线”将从DataFrame中删除   回。 (仅对C解析器有效)

所以你可以这样做:

>>> file = pd.read_csv("a.txt",dtype = None,delimiter = " ",error_bad_lines=False)
Skipping line 3: expected 6 fields, saw 8
Skipping line 5: expected 6 fields, saw 7

>>> file
     4    7    a  a.1
s g  6  8.0  0.0    d
f g  3  NaN  NaN  NaN

或者您可以使用skiprows参数跳过您想要的行,这是文档对skiprows所说的内容:

  

skiprows:list-like或integer,default无要跳过的行号   (0索引)或文件开头要跳过的行数(int)