在 read_csv 之后选择 pandas 数据框中的列时出现关键错误
Posted
技术标签:
【中文标题】在 read_csv 之后选择 pandas 数据框中的列时出现关键错误【英文标题】:Key error when selecting columns in pandas dataframe after read_csv 【发布时间】:2016-06-20 06:43:57 【问题描述】:我正在尝试将 CSV 文件读入 pandas 数据框并选择一列,但不断收到关键错误。
文件读入成功,我可以在 iPython 笔记本中查看数据框,但是当我想选择除第一列之外的任何列时,它会引发关键错误。
我正在使用此代码:
import pandas as pd
transactions = pd.read_csv('transactions.csv',low_memory=False, delimiter=',', header=0, encoding='ascii')
transactions['quarter']
这是我正在处理的文件: https://www.dropbox.com/s/81iwm4f2hsohsq3/transactions.csv?dl=0
谢谢!
【问题讨论】:
【参考方案1】:使用sep='\s*,\s*'
,这样您就可以处理列名中的空格:
transactions = pd.read_csv('transactions.csv', sep=r'\s*,\s*',
header=0, encoding='ascii', engine='python')
或者,您可以确保您的 CSV 文件中没有未加引号的空格并使用您的命令(未更改)
证明:
print(transactions.columns.tolist())
输出:
['product_id', 'customer_id', 'store_id', 'promotion_id', 'month_of_year', 'quarter', 'the_year', 'store_sales', 'store_cost', 'unit_sales', 'fact_count']
【讨论】:
列表显示我的名字中有一个额外的空格。非常感谢,我已经把头撞在墙上了几小时了 谢谢!虽然这个错误很荒谬。想知道为什么他们不能抛出更好的错误信息。我得到的错误是:文件“pandas/_libs/hashtable_class_helper.pxi”,第 1618 行,在 pandas._libs.hashtable.PyObjectHashTable.get_item 文件“pandas/_libs/hashtable_class_helper.pxi”,第 1626 行,在 pandas._libs。 hashtable.PyObjectHashTable.get_item 唯一的问题是C引擎不支持正则表达式,所以它回退到python引擎。【参考方案2】:如果您需要从数据框中选择多列,请使用 2 对方括号 例如。
df[["product_id","customer_id","store_id"]]
【讨论】:
这解决了我的问题,但我不知道为什么?你可以解释吗?我假设我给定的列名与实际文件的列名不匹配,那么它是如何解决问题的? @NawshadFarruque 我认为这是因为双括号返回一个数据帧,而 snigle 返回一个系列。【参考方案3】:我遇到了同样的问题,从CSV读取后过滤列时出现关键错误。
原因
这些问题的主要原因是 CSV 文件中的额外的初始空格。 (在您上传的 CSV 文件中找到,例如 , customer_id, store_id, promotion_id, month_of_year,
)
证明
为了证明这一点,你可以试试print(list(df.columns))
,列名必须是['product_id', ' customer_id', ' store_id', ' promotion_id', ' month_of_year', ...]
。
解决方案
解决这个问题的直接方法是在pd.read_csv()
中添加参数,例如:
pd.read_csv('transactions.csv',
sep = r',',
skipinitialspace = True)
参考:https://***.com/a/32704818/16268870
【讨论】:
【参考方案4】:如果键与任何数据框列名“完全”不匹配,通常会出现键错误:
你也可以试试:
import csv
import pandas as pd
import re
with open (filename, "r") as file:
df = pd.read_csv(file, delimiter = ",")
df.columns = ((df.columns.str).replace("^ ","")).str.replace(" $","")
print(df.columns)
【讨论】:
以上是关于在 read_csv 之后选择 pandas 数据框中的列时出现关键错误的主要内容,如果未能解决你的问题,请参考以下文章
pandas常见用法总结:数据筛选,过滤,插入,删除,排序,分组聚合等
pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据
pandas使用read_csv读取数据使用index_col参数移除Unnamed:0数据列pandas使用read_csv读取压缩格式文件