在我将python 2.x升级到3.x之前,此代码一直有效。 我有一个包含3列ipk1,ipk2,ipk3列的df。 由浮点数0-4.0组成的ipk1,ipk2,ipk3 我想将它们分类为字符串。
数据看起来像这样:
ipk1 ipk2 ipk3 ipk4 ipk5 jk
0 3.25 3.31 3.31 3.31 3.34 P
1 3.37 3.33 3.36 3.33 3.41 P
2 3.41 3.47 3.59 3.55 3.60 P
3 3.23 3.10 3.05 2.98 2.97 L
4 3.24 3.40 3.22 3.23 3.25 L
在python 2.x上,此代码有效,但是在将其升级到python 3后,它却无效。还有其他方法可以将其装到字符串中吗?我尝试过使用它也无济于事。
train1.loc[train1['ipk1'] > 3.6, 'ipk1'] = 'A',
train1.loc[(train1['ipk1']>3.2) & (train1['ipk1']<=3.6),'ipk1']='B',
train1.loc[(train1['ipk1']>2.8) & (train1['ipk1']<=3.2),'ipk1']='C',
train1.loc[(train1['ipk1']>2.4) & (train1['ipk1']<=2.8),'ipk1']='D',
train1.loc[(train1['ipk1']>2.0) & (train1['ipk1']<=2.4),'ipk1']='E',
train1.loc[(train1['ipk1']>1.6) & (train1['ipk1']<=2.0),'ipk1']='F',
train1.loc[(train1['ipk1']>1.2) & (train1['ipk1']<=1.6),'ipk1']='G',
train1.loc[train1['ipk1'] <= 1.2, 'ipk1'] = 'H'
我收到的错误:
TypeError: '>' not supported between instances of 'str' and 'float'
我的预期输出:
ipk1 ipk2 ipk3 ipk4 ipk5 jk
0 B 3.31 3.31 3.31 3.34 P
1 B 3.33 3.36 3.33 3.41 P
2 B 3.47 3.59 3.55 3.60 P
3 B 3.10 3.05 2.98 2.97 L
4 B 3.40 3.22 3.23 3.25 L
答案 0 :(得分:2)
这是pandas.cut
的好用例:
bins = [-np.inf, 1.2, 1.6, 2.0, 2.4, 2.8, 3.2, 3.6, np.inf]
labels = ['H', 'G', 'F', 'E', 'D', 'C', 'B', 'A']
df['ipk1'] = pd.cut(df['ipk1'], bins=bins, labels=labels)
答案 1 :(得分:2)
您可以使用pd.cut
以更简单的方式执行此操作。这是您的操作方法:
bins = [float('-inf'),1.2,1.6,2.,2.4,2.8,3.2,3.6,float('inf')]
labels = ['H','G','F','E','D','C','B','A']
df['ipk1'] = pd.cut(df.ipk1, bins=bins, labels=labels)
print(df)
ipk1 ipk2 ipk3 ipk4 ipk5 jk
0 B 3.31 3.31 3.31 3.34 P
1 B 3.33 3.36 3.33 3.41 P
2 B 3.47 3.59 3.55 3.60 P
3 B 3.10 3.05 2.98 2.97 L
4 B 3.40 3.22 3.23 3.25 L