我试图编写一个函数,该函数通过一个充满浮点数的pandas df系列,并根据它们在系列范围内的位置将它们转换为四个字符串分类变量之一。因此,范围四分位数中的所有值都将转换为low,low_mid,high_mid或high。我已经通过多种方式完成了它,但不断收到各种错误消息。最新的尝试及其信息如下。如果有人可以偷看并抛弃任何想法/修复,我会很感激。谢谢!
def makeseriescategorical(x):
for i in x:
if i < 59863.0:
str(i)
i.replace(i, "low")
elif i > 59862.0 and i < 86855.0:
str(i)
i.replace(i, "low_mid")
elif i > 86854.0 and i < 125250.0:
str(i)
i.replace(i, "high_mid")
elif i > 125249.0 and i < 332801:
str(i)
i.replace(i, "high")
我上次尝试的错误信息是: AttributeError:&#39; numpy.float64&#39;对象没有属性&#39;替换&#39;
我已经尝试过其他各种方法来使它成为像astype这样的字符串,但我一直都会遇到错误。我对编码很陌生,所以我确信我很有可能犯了一个愚蠢的错误,但我很感激任何人都能给我的帮助。欢呼声。
答案 0 :(得分:4)
我使用了矢量化pd.cut()方法:
In [51]: df = pd.DataFrame(np.random.randint(0, 332801, 10), columns=['val'])
In [52]: df
Out[52]:
val
0 230852
1 140030
2 231657
3 73146
4 240890
5 328660
6 194801
7 240684
8 44439
9 35558
In [53]: bins = [-np.inf, 59863.0, 86855.0, 125250.0, 332801]
In [54]: labels=['low','low_mid','high_mid','high']
In [55]: df['category'] = pd.cut(df.val, bins=bins, labels=labels)
In [56]: df
Out[56]:
val category
0 230852 high
1 140030 high
2 231657 high
3 73146 low_mid
4 240890 high
5 328660 high
6 194801 high
7 240684 high
8 44439 low
9 35558 low
In [57]: df.dtypes
Out[57]:
val int32
category category
dtype: object