【问题标题】:Key error when selecting columns in pandas dataframe after read_csv在 read_csv 之后选择 pandas 数据框中的列时出现关键错误
【发布时间】: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

谢谢!

【问题讨论】:

    标签: python csv pandas


    【解决方案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://stackoverflow.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)
      

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多