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的主要内容,如果未能解决你的问题,请参考以下文章