如何处理CSV数据放错问题?

时间:2018-10-02 14:07:22

标签: python pandas csv

我对数据放错有问题。 数据右移两个单元格。

enter image description here

我的问题是:

  1. 如何导入这些数据?自从我使用pd.read_csv以来,总是会出现以下错误:

    ParserError: Error tokenizing data. C error: Expected 18 fields in line 6071, saw 19
    
  2. 如何处理数据错位?我的意思是如何使用python使数据在两个单元格之间右移?

感谢您的建议,这是我的代码:

# -*- coding: utf-8 -*-
import pandas as pd
import os
WorkingPath = u'E:\\Document'   

os.chdir(WorkingPath)

Shareholder= pd.read_csv(u'./1shareholder/Shareholders.csv', \
                     encoding='utf-16le', delimiter='\t')

2 个答案:

答案 0 :(得分:0)

如果是.CSV,则表示整个文件的结构为

    COLUMN1,COLUMN2,COLUMN3\n
    1,2,3\n
    A,B,C\n
    Dog,Cat,Bird\n

或一个长字符串为“ COLUMN1,COLUMN2,COLUMN3 \ n1,2,3 \ nA,B,C \ nDog,Cat,Bird \ n” 您将使用循环来查找逗号和换行符作为定界符。如果要向左移动几个单元格,则需要解析csv文本并处理逗号。因此,如果需要将单元格2移至左侧,则可以找到所拥有的列数,将要移至左侧的列,然后删除两个逗号(取决于您希望它与列的匹配方式)并添加它们在右边。

实际上,在您的图像中可能并不是放错了位置,但是有可能会省略那些没有这些列数据的字段。 因此,如果您有

COLUMN1,COLUMN2,COLUMN3\n
1,,3\n
A,B,C,D\n
Dog,Bird\n

单元格看起来像

Column1 | Column2 | Column3
1       |         | 3
A       | B       | C       | D
Dog     | Bird    

因此布局将被弄乱。

答案 1 :(得分:0)

发生此错误是因为CSV阅读器遇到的行宽度与标题行(假定为第一行)的宽度不同。

为避免这种情况,请告诉它数据没有标题,而应根据编号范围命名列:

df = pd.read_csv(file, header=None, names=range(20))

(用最大数据宽度替换20。)

如有必要,您以后可以使用df.columns=...重新标记列标题,并且如果需要删除第一行数据(因为它包含标题而不是数据),请使用df = df.drop(0)

要将放错位置的单元格向左移动,您需要执行以下操作:

import numpy as np
...
df.loc[~np.isnan(df[19]), [17, 18]] = df[[19, 20]]

这将在第19列的单元格不为空的行中将第17列和第18列替换为第19列和第20列。