2017-11-11 136 views
0

我正在使用熊猫遍历csv。 csv不均匀,即一些额外的列(在某些行中)没有标题。我得到这个错误熊猫跳过列

pandas.errors.ParserError: Error tokenizing data. C error: Expected 11 fields in line 8, saw 12 

我读了一些解决方案,但其中一些跳过整条生产线及其他建议手动调整。我买不起两种。 我需要一个方法,可以删除额外的列保持行的其余部分。

这里的例子任何帮助将不胜感激数据

Country Phone   Fax  
Germany 030-0074321 030-0076545 
Mexico (5) 555-4729 (5) 555-3745 
Mexico (5) 555-3932 NULL 
67000 France   88.60.15.31  88.60.15.32 
28023 Spain   (91) 555 22 82 (91) 555 91 99 

的。

+0

请问您能分享一个您的数据的例子吗? – MedAli

+0

我已经更新了问题本身。请看一看。 –

回答

0

假设你有列[ 'A', 'B', 'C', 'd', 'E']和4行,使得数据帧DF的样子:

Row A B C D`E 
1  1`1 1 1 5 
2  0 2 0 0 
3  2 4 1 2 2 
4  5 4 5 4 

现在如果你想删除多余的列从行1和3“E”值,那么你可以简单地让另一个列表

features=df.columns 
f=[] 
for feature in features: 
    if df[feature].notnull().all(): 
     f.append(feature) 

df=df[f] 
print df 

因此现在输出将是:

Row A B C D` 
1  1`1 1 1 
2  0 2 0 0 
3  2 4 1 2 
4  5 4 5 4 

希望ŧ他的帮助!

+0

没有阅读csv,我怎么知道我有什么列? –

+0

用于将csv读取为数据帧使用pandas命令,如下所示: 将pandas导入为pd df = pd.read_csv(pathtofile) 然后执行上述步骤 – Somit

+0

即问题所在。当我使用read_csv读取csv时,它抛出了上面提到的错误。 –

0

如果你知道你有多少列。 data = pd.read_csv('data.csv',usecols = [0,1,2,3]) [0,1,2,3 ...]是包含内容的列。其他你不知道的。 enviroment - python2.7 import pandas data = pandas.read_csv("file.csv") names = list(data) for name in names: if "Unnamed" in name: data.pop(name) print "result" print data

+0

我不知道我有多少列。它可以不同。我无法手动读取csv,每次输入静态列数。 –