我已经在Python 3 Jupyter笔记本的数据框架中读取了一份Excel调查响应表,并希望删除个人在一个特定程序中的行。因此,我使用.loc.将数据帧"df"的子集转换为新的数据帧"dfgeneral"
notnurse = df['Program Code'] != 'NSG'
dfgeneral = df.loc[notnurse,:]
然后,我想将标签(即满意、不满意)映射到用于表示它们的代码,并找到给出每个回复的受访者数量。有几个问题使用相同的量表,所以我循环浏览它们:
q5list = ['Q5_1','Q5_2','Q5_3','Q5_4','Q5_5','Q5_6']
scale5_dict = {1:'Very satisfied',2:'Satisfied',3:'Neutral',
4:'Somewhat dissatisfied',5:'Not satisfied at all',
np.NaN:'No Response'}
for i in q5list:
dfgeneral[i] = df[i].map(scale5_dict)
print(dfgeneral[i].value_counts(dropna=False))
在输出中,我得到SettingWithCopy警告:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
我使用.loc创建dfgeneral;这是一个假阳性,还是我应该做出什么改变?谢谢你的帮助。
dfgeneral = df.loc[notnurse,:]
这一行(第二行)获取DataFrame的一个切片,并将其分配给一个变量。当您想要操作该变量时,您会看到警告(试图在DataFrame的切片副本上设置值)。
将该行更改为:
dfgeneral = df.loc[notnurse, :].copy()