我用的是this csv
import pandas as pd
import numpy as np
real_estate = pd.read_csv('real_estate.csv',index_col=0)
buckets = pd.cut(real_estate['X2 house age'],4,labels=False)
for i in range(len(real_estate['X2 house age'])):
real_estate.loc[i,'X2 house age'] = buckets[i]
它给了我:
KeyError: 0
对于real_estate.loc[i,'X2 house age'] = buckets[i]
行,它只在第一次迭代时失败
为什么我需要将行更改为buckets = pd.cut(real_estate['X2 house age'],4,labels=False).to_numpy()
才能使其工作?
2条答案
按热度按时间66bbxpm51#
你不需要循环,只需要用途:
您当前的方法失败了,因为您没有从
0
开始的范围索引。因此,当赋值给索引0
,1
,.时,pandas没有找到正确的索引,并移动了数据。输出量:
vs3odd8k2#
除了我们可以将结果直接分配给新列之外,主要的问题是位置索引和标记索引之间的混淆。
您应该在
real_estate.index
上进行重命名,或者使用.iloc
或.iat
对位置数据进行寻址:或
哪里
使用
.to_numpy()
会导致带标签的索引被擦除,之后buckets[i]
就相当于位置索引。另请参阅:
ps.以防万一:
pandas.cut(..., labels=False)
不影响返回序列的索引,但用类别代码替换类别标签。