【问题标题】:Pandas parsing csv error - expected 1 fields found 9Pandas 解析 csv 错误 - 预计找到 1 个字段 9
【发布时间】:2018-09-12 22:21:17
【问题描述】:

我正在尝试从 .csv 文件中解析:

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

但我总是以这个错误结束:

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

这是我的 csv 文件的前几行的样子:

# 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

编辑:这是第 13 行:

loc_rowid,pl_hostname,pl_discmethod,pl_pnum,pl_orbper,pl_orbsmax,st_dist,st_teff,st_mass

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

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

【问题讨论】:

  • 您可能需要检查第 13 行。
  • 你应该在第 13 行发布数据,这样可以提供更多线索
  • @NEOmen 这是第 13 行:loc_rowid,pl_hostname,pl_discmethod,pl_pnum,pl_orbper,pl_orbsmax,st_dist,st_teff,st_mass
  • 那么第 1-12 行是什么?你想阅读那里的信息吗?
  • @xg.plt.py 这些只是包含文件中数据信息的 cmets。

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


【解决方案1】:

函数pandas.read_csv() 从第一行获取列数及其名称。默认情况下,它不考虑第一行是 cmets 的选项。

发生的情况是,pandas 读取第一行,将其拆分并发现只有一列,因此拆分到第 13 行,这是 第一个未注释的行。为了解决这个问题,可以使用参数comment

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

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

【讨论】:

  • 不客气,我不记得read_csv的所有选项,我必须经常检查文档,没问题:)。
【解决方案2】:

看起来你需要skiprows。您可以跳过所有的 cmets。

例如:

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

【讨论】:

  • 这只是跳过了 csv 文件中的所有行。
  • 你能在你的问题中发布前 20 行吗?
  • 是的,更新后的 sn-p 效果很好,谢谢 :)
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 同样,这只是跳过了 csv 文件中的所有行。
    【解决方案5】:

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

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

    话虽如此,可能存在一些问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2013-01-21
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多