首页 > 解决方案 > 用 pandas 读取 csv 并指定列名

问题描述

我正在尝试使用熊猫从 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
...

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

谢谢!

标签: pandascsv

解决方案


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

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

来自官方文档

delim_whitespace : 布尔值,默认为 False

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

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

再次从官方文档中您可以看到您应该:

  • 使用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表示数据的第一行而不是文件的第一行


推荐阅读