用pandas读取csv并指定列名

时间:2018-05-07 16:45:35

标签: pandas csv

我尝试使用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
...

任何人都知道我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在尝试导入“空格”分隔的DataFrame。正如@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表示第一行数据而不是文件的第一行