问题描述
我正在尝试使用以下代码对pd.Series中的数据进行分类:
for index in range (len(B)):
if B.loc[index,'N1','N4']:
B['Category'] = NN1
elif B.loc[index,'N2','N3','N5']:
B['Category']== NN2
else return(nan)
没有可遵循的模式,因为我已经对数据进行了预处理,并发现N1和N4属于NN1类别。 N2,N3和N5都属于NN2类别。
B是我的数据系列。 N1 N2 N3 N4 N5是我的行索引。 “类别”是我想在系列中添加的新列。
TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <class 'int'>
有人可以帮助吗?
解决方法
您的代码有两个问题-首先,即使您有一个非数字索引,您还是将索引作为整数来处理。其次,您打算作为第二个任务实际上是一个布尔表达式。 return语句仅在函数主体中有意义,但是在Category
列中未得到显式分配的行将始终被分配nan
。由于您需要多个列,因此使用DataFrame而不是Series。如果您从其他地方收到了一个系列S
,则可以通过以下方式从中创建一个DataFrame:
B = pd.DataFrame(S,index=S.index).
使用B,您可以执行以下操作
for index in B.index:
if index in {'N1','N4'}:
B.loc[index,'Category'] = 'NN1'
elif index in {'N2','N3','N5'}:
B.loc[index,'Category'] = 'NN2'
或更确切地说
for index in ['N1','N4']:
B.loc[index,'Category'] = 'NN1'
for index in ['N2','N5']:
B.loc[index,'Category'] = 'NN2'