Python 读取csv后在数据帧中选择列时出现键错误
我正在尝试将CSV文件读入pandas数据框并选择一列,但不断收到一个键错误 文件读取成功,我可以在iPython笔记本中查看数据帧,但当我想选择除第一列以外的任何列时,它会抛出一个键错误 我正在使用以下代码:Python 读取csv后在数据帧中选择列时出现键错误,python,csv,pandas,Python,Csv,Pandas,我正在尝试将CSV文件读入pandas数据框并选择一列,但不断收到一个键错误 文件读取成功,我可以在iPython笔记本中查看数据帧,但当我想选择除第一列以外的任何列时,它会抛出一个键错误 我正在使用以下代码: import pandas as pd transactions = pd.read_csv('transactions.csv',low_memory=False, delimiter=',', header=0, encoding='ascii') transactions['qu
import pandas as pd
transactions = pd.read_csv('transactions.csv',low_memory=False, delimiter=',', header=0, encoding='ascii')
transactions['quarter']
这是我正在处理的文件:
谢谢大家! 使用
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']
如果键与任何dataframe列名“完全”不匹配,则通常会出现键错误: 您也可以尝试:
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)
如果需要从dataframe中选择多列,请使用2对方括号 例如
我遇到了同样的问题,从CSV读取后过滤列时会出现关键错误 理由 这些问题的主要原因是CSV文件中出现了额外的初始空白。(可在上传的CSV文件中找到,例如,
、客户id、门店id、促销id、年度月份,
)
证明
为了证明这一点,您可以尝试打印(列表(df.columns)),列的名称必须是['product\u id','customer\u id','store\u id','promotion\u id','month\u of\u year',…]
解决方案
解决此问题的直接方法是在pd.read\u csv()
中添加参数,例如:
pd.read\u csv('transactions.csv',
sep=r',',
SkipInInitialSpace=True)
参考资料:列表显示我的名字中有多余的空格。非常感谢,我已经把头撞在墙上几个小时了谢谢!然而,这个错误是荒谬的。想知道为什么他们不能抛出更好的错误消息。我得到的错误是:文件“pandas/_libs/hashtable\u class\u helper.pxi”,第1618行,在pandas.\u libs.hashtable.PyObjectHashTable.get\u项文件“pandas/_libs/hashtable\u class\u helper.pxi”,第1626行,在pandas.\u libs.hashtable.PyObjectHashTable.get\u项中唯一的问题是C引擎不支持正则表达式,这解决了我的问题,但我不知道为什么?你能解释一下吗?我假设我给定的列名与实际文件的列名不匹配,那么它如何解决这个问题呢?
df[["product_id","customer_id","store_id"]]