Python 为什么即使列出现在pandas中也会出现键错误?

Python 为什么即使列出现在pandas中也会出现键错误?,python,pandas,casting,Python,Pandas,Casting,我的文件包含Company、RecordID、Sale等列。当我在将文件加载到pandas dataframe后首次尝试查找其数据类型时,它列出了几个列的float/int。所以我将它们更改为字符串,如下所示 data = pd.read_csv(filepath) print(data.dtypes) Company Code object SiteCode int64 Product Name object RECOR

我的文件包含Company、RecordID、Sale等列。当我在将文件加载到pandas dataframe后首次尝试查找其数据类型时,它列出了几个列的float/int。所以我将它们更改为字符串,如下所示

data = pd.read_csv(filepath)
    print(data.dtypes)

Company Code          object
SiteCode               int64
Product Name          object
RECORD ID             int64
Tank ID                int64
Date                   int64
Sale Volume          float64
Deliveries Volume      int64
Dip Volume           float64
然后,在将输出写入文件之前,我将其类型更改为string

>   data['RECORD ID'] = data['RECORD ID'].astype(str)
>      data['Tank ID'] = data['Tank ID'].astype(str)
我得到了

    return self._engine.get_loc(key)
  File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'RECORD ID'
若我注释recordid并让Tankid转换,那个么Tankid会得到相同的键错误,为什么

以下是示例csv<代码>SIRA记录ID和
储罐ID
列给出问题

 Company Code,SiteCode,Product Name,SIRA RECORD ID,Tank ID,Date,Sale Volume,Deliveries Volume,Dip Volume
    XXX,20995,27PMAXDSL,3535352,4,20191004,4383.49,12902,16000
    XXX,20995,02ULP,3535351,3,20191004,8221.573,15996,9987.32
    XXX,20995,02ULP,3535350,2,20191004,7303.1,8201,11200

请尝试下面的代码。索引列表被传递给索引,而不是直接传递给索引

record_ids = data[["RECORD ID"]]

请尝试以下测试,而不是手动输入列名:

对于data.columns中的列:
数据[col]=数据[col].aType(str)
这也适用于整个数据帧

data=data.astype('str')

如果需要将所有列更好地转换为字符串,请在
read\u csv
中使用参数
dtype

data = pd.read_csv(filepath, dtype=str)

什么是打印(data.columns.tolist())?也许去旅行whitespace@jezrael不,它完全按照我的定义打印,没有任何尾随whitespces@jezrael不,它是单个whitespce..您可以共享CSV文件的示例吗?无法使用示例CSV复制它。真的很奇怪。这是什么?我没有得到数据。熊猫数据框对吗?如果要从数据帧访问列,不能简单地使用索引。您需要传递一个索引列表。这里我们只需要其中一个,所以我们使用数据[[“记录ID”]]而不是数据[“记录ID”]这与数据类型更改有关吗?@SaswathMishra使用您使用的列表仅在尝试访问多个列时需要。所以说data['RECORD ID']来访问单个列是完全正确的。@Ratha看起来在列名的某个地方有一个特殊字符,它没有立即打印出来。为什么不更改列名并删除可能与记录类似的空格_id@Trenton你知道为什么这种方式不会导致问题,而OPs方式会吗?我怀疑这个名字的命名方式有问题。Pandas会在列名中隐藏空格,因此即使复制列名,也可能无法实际工作。我需要查看实际的csv进行验证。我认为这不是她想要的。在保存到csv之前,她只想在最后以
str
的形式获取它们。她不想要csv中的十进制表示。否则,是的。