【问题标题】:reading csv with pandas and specifying columns names [duplicate]用熊猫读取csv并指定列名[重复]
【发布时间】:2018-10-17 12:55:05
【问题描述】:

我正在尝试使用 pandas 从 csv 文件导入数据:

data=pd.read_csv("data.csv")

这似乎工作正常。接下来我想用

指定列的名称
data.columns = ['X', 'Y']

这样我以后可以绘制它。问题来了:

File "pandas/_libs/hashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'X'

csv 文件格式如下

   X   Y    
  20   120  
  25   145  
  41   160  
  62   301
...

有人知道我做错了什么吗?

谢谢!

【问题讨论】:

  • 什么代码返回错误?
  • data.columns = ['X', 'Y'] 上面给出错误
  • 嗯,print (data.columns) 之前的data.columns = ['X', 'Y'] 是什么?
  • 它给出了 Index([' X Y '], dtype='object')
  • 我认为有分隔符空格,所以需要data=pd.read_csv("data.csv", delim_whitespace=True)并省略data.columns = ['X', 'Y']

标签: pandas csv


【解决方案1】:

您正在尝试导入“空格”分隔的 DataFrame。正如 cmets 中的@jezrael 所说,您应该使用:

data=pd.read_csv("data.csv", delim_whitespace=True) 

来自official doc

delim_whitespace : 布尔值,默认为 False

相当于设置 sep='\s+'。 如果此选项设置为 True,则不应为 delimiter 参数传递任何内容。

此外,如果您想指定列名(这是您的问题):

再次从official documentation 你可以看到你应该:

  • 使用names 参数指定列应采用的名称。
  • 使用header参数告诉python第一行(索引0)应该被解析为colnames

所以要恢复,你应该能够使用以下三个语句中的任何一个:

data = pandas.csv("data.csv", delim_whitespace=True, names=["X","Y"])

data = pandas.csv("data.csv", delim_whitespace=True, header=0)

data = pandas.csv("data.csv", sep="\s+") 

关于header参数:

用作列名的行号,以及数据的开头。默认行为是推断列名 如果没有传递名称,则行为与 header=0 相同,并且从文件的第一行推断列名

注意如果skip_blank_lines=True,这个参数会忽略注释行和空行,所以header=0表示数据的第一行而不是文件的第一行

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 2019-06-23
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多