Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取csv后在数据帧中选择列时出现键错误_Python_Csv_Pandas - Fatal编程技术网

Python 读取csv后在数据帧中选择列时出现键错误

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

我正在尝试将CSV文件读入pandas数据框并选择一列,但不断收到一个键错误

文件读取成功,我可以在iPython笔记本中查看数据帧,但当我想选择除第一列以外的任何列时,它会抛出一个键错误

我正在使用以下代码:

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"]]