Pandas解析csv错误 - 预计找到1个字段9

时间:2018-04-03 14:30:57

标签: python python-3.x pandas csv data-analysis

我试图从.csv文件解析:

fail

但我总是最终得到这个错误:

planets = pd.read_csv("planets.csv", sep=',')

这就是我的csv文件的前几行:

ParserError: Error tokenizing data. C error: Expected 1 fields in line 13, saw 9

编辑:这是第13行:

# This file was produced by the test
# Tue Apr  3 06:03:27 2018
#
# COLUMN pl_hostname:    Host Name
# COLUMN pl_discmethod:  Discovery Method
# COLUMN pl_pnum:        Number of Planets in System
# COLUMN pl_orbper:      Orbital Period [days]
# COLUMN pl_orbsmax:     Orbit Semi-Major Axis [AU])
# COLUMN st_dist:        Distance [pc]
# COLUMN st_teff:        Effective Temperature [K]
# COLUMN st_mass:        Stellar Mass [Solar mass] 
#
loc_rowid,pl_hostname,pl_discmethod,pl_pnum,pl_orbper,pl_orbsmax,st_dist,st_teff,st_mass
1,11 Com,Radial Velocity,1,326.03000000,1.290000,110.62,4742.00,2.70
2,11 UMi,Radial Velocity,1,516.22000000,1.540000,119.47,4340.00,1.80
3,14 And,Radial Velocity,1,185.84000000,0.830000,76.39,4813.00,2.20
4,14 Her,Radial Velocity,1,1773.40000000,2.770000,18.15,5311.00,0.90
5,16 Cyg B,Radial Velocity,1,798.50000000,1.681000,21.41,5674.00,0.99
6,18 Del,Radial Velocity,1,993.30000000,2.600000,73.10,4979.00,2.30
7,1RXS J160929.1-210524,Imaging,1,,330.000000,145.00,4060.00,0.85

编辑:感谢@Rakesh,跳过前12行解决了问题

planets = pd.read_csv(" planets.csv",sep =',',skiprows = 12)

5 个答案:

答案 0 :(得分:1)

函数pandas.read_csv()从第一行获取列数及其名称。默认情况下,它不会将第一行的选项视为注释。

发生的事情是pandas读取第一行,将其拆分并发现只有一列,将此分割的行插入第13行,即首先未注释的行。要解决此问题,可以使用参数comment

planets = pd.read_csv("planets.csv", comment='#')

与使用skiprows相比,即使注释行数量不同,这也允许相同的代码加载planets.csv文件。

答案 1 :(得分:0)

您似乎需要skiprows。您可以跳过所有评论。

<强>实施例

planets = pd.read_csv("planets.csv", sep=',', skiprows=12)

答案 2 :(得分:0)

当我无法弄清楚错误的确切原因时,我已经开始工作了:

planets = pd.read_csv('planets.csv', sep=',', error_bad_lines=False)

答案 3 :(得分:0)

除了上面的答案,如果你只有第13行遇到问题,你可以跳过它。

pd.read_csv("plants.csv", skiprows = 12, header=None)

答案 4 :(得分:0)

我刚刚使用你提供的csv数据运行了以下代码,它运行没有问题。我在下面运行了以下内容

import pandas as pd planets = pd.read_csv("planets.csv", sep=',') print(planets)

话虽如此,可能会有一些问题。

首先,您可以将分隔符设置为嗅探sep=None,让pandas找出分隔符是什么。你也可以设置headers=None所以它看起来像:

pd.read_csv("planets.csv", sep=None, headers=None)

可能存在编码问题。您可以尝试将编码设置为其中一些值,以查看错误是否存在https://docs.python.org/3/library/codecs.html#standard-encodings