pandas - 用 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
...
有人知道我在做什么错吗?
谢谢!
解决方案
您正在尝试导入“空格”分隔的 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表示数据的第一行而不是文件的第一行
推荐阅读
- python-3.x - 关于在 sorted() 中使用 key 参数进行自定义排序的问题
- r - 您如何确定应用函数正在处理的列号以使用该数字来检索由该数字索引的变量
- django - 如何为我的帖子分配外键值
- sql - 如何在不更改 SQL Server 中的数据类型的情况下将日期时间转换为日期?
- javascript - 物化 CSS 选项卡不显示滚动行为
- html - 如何禁用剑道网格复选框列?
- html - 无法从 Flicker 渲染图像
- scala - 尝试在解析器中创建一个内置的 null-to-enum 转换器
- python - Keras 中类别子部分的准确度指标
- android - 如何更新通知栏下载文件?