在 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

pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据

pandas.read_csv 来自字符串或包数据

防止 pandas 将 None 读为 Nan

pandas使用read_csv读取数据使用index_col参数移除Unnamed:0数据列pandas使用read_csv读取压缩格式文件