我对数据放错有问题。 数据右移两个单元格。
我的问题是:
如何导入这些数据?自从我使用pd.read_csv
以来,总是会出现以下错误:
ParserError: Error tokenizing data. C error: Expected 18 fields in line 6071, saw 19
如何处理数据错位?我的意思是如何使用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')
答案 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列。