KeyError:重命名数据框列后为 1.0

Posted

技术标签:

【中文标题】KeyError:重命名数据框列后为 1.0【英文标题】:KeyError: 1.0 after renaming columns of dataframe 【发布时间】:2020-11-02 23:49:51 【问题描述】:

以下脚本:

import pandas as pd
import numpy as np
import math

A = pd.DataFrame(np.array([[1,2,3,4],[5,6,7,8]]))

Floor1 = math.floor(A.min()[1]/2)*2

names = np.array([ 0.   ,  0.635,  1.27 ,  1.905])

A.columns = names

Floor2 = math.floor(A.min()[1]/2)*2

Floor1 正在正确执行,Floor2 使用相同的 df 但重命名的列却没有。我收到一个关键错误:

Traceback (most recent call last):

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2646, in get_loc
    return self._engine.get_loc(key)

  File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\hashtable_class_helper.pxi", line 385, in pandas._libs.hashtable.Float64HashTable.get_item

  File "pandas\_libs\hashtable_class_helper.pxi", line 392, in pandas._libs.hashtable.Float64HashTable.get_item

KeyError: 1.0


During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "C:\Users\Desktop\Python\untitled0.py", line 13, in <module>
    Floor2 = math.floor(A.min()[1]/2)*2

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", line 871, in __getitem__
    result = self.index.get_value(self, key)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\numeric.py", line 449, in get_value
    loc = self.get_loc(k)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\numeric.py", line 508, in get_loc
    return super().get_loc(key, method=method, tolerance=tolerance)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2648, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))

  File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\hashtable_class_helper.pxi", line 385, in pandas._libs.hashtable.Float64HashTable.get_item

  File "pandas\_libs\hashtable_class_helper.pxi", line 392, in pandas._libs.hashtable.Float64HashTable.get_item

KeyError: 1.0

我知道,有一个类似的问题:After rename column get keyerror

但我并没有真正得到答案——更重要的是——如何解决它。

【问题讨论】:

问题:0.000 0.635 1.270 1.905中有1.0吗? 不,这只是我发布的代码:names = np.array([ 0. , 0.635, 1.27 , 1.905]) 【参考方案1】:

如果您使用list(A.columns) 获得A 的列,则在重命名之前,您会看到您将获得[0,1,2,3] 列表。因此,您可以使用键 1 进行索引。但是,重命名后,您无法再使用键 1 进行索引,因为列名已更改。

【讨论】:

现在我明白了:D。谢谢【参考方案2】:

如果您使用的是A.min(),您会发现axis=0 中的最小值默认 沿列排列。 更改列名时,您无法访问索引“1”,因为列中没有名称为“1”的索引。

如果您的意图是在中找到最小值,您可以使用A.min(axis=1)

你可以这样写代码。

import pandas as pd
import numpy as np
import math

A = pd.DataFrame(np.array([[1,2,3,4],[5,6,7,8]]))

Floor1 = math.floor(A.min(axis=1)[1]/2)*2

names = np.array([ 0.   ,  0.635,  1.27 ,  1.905])

A.columns = names

Floor2 = math.floor(A.min(axis=1)[1]/2)*2

谢谢

【讨论】:

以上是关于KeyError:重命名数据框列后为 1.0的主要内容,如果未能解决你的问题,请参考以下文章

重命名由当前名称引用的多个数据框列

使用 Pyspark 动态重命名数据框列

使用 pandas 重命名数据框列中的元素

在 spark python 中重命名数据框列

Pandas df.itertuples 在打印时重命名数据框列

Xcode 6如何重命名复制的目标