尝试使用.loc

时间:2019-01-15 16:04:50

标签: python-3.x pandas

尝试修改数据框列中的所有值,其中另一列中的值等于特定值。

我正在使用数据列df,其中包含a,b,c,d列。我首先使用

复制了列d

df [“ e”] = df [“ d”]

然后,我用.loc去了:

df.loc[df["d"] == "Unknown", "e"] = "Not Unknown!"

我得到一个:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

在其他情况下,这种做法过去很奏效,我感到非常困惑,而且我似乎无法弄清楚到底发生了什么。对于信息,dtype为“ d”是一个字符串。如果我直接.loc,它将返回预期结果。

由于我正在更改列d的所有值,因此我还认为复制列可能是问题所在,因此我尝试使用以下另一种方法复制它:

df = df.assign(e=pd.Series(np.random.randn(len(df))).values)

但是得到了相同的结果。

感谢您发现我的(我确信会是)明显错误的任何帮助!

编辑:来自df的示例, a b c d e 0 21838344 00001 50 Unknown Unknown 1 35652924 00001 80 Unknown Unknown 2 35652925 00001 80 Unknown Unknown 3 31206900 00001 80 Unknown Unknown 4 37544700 00001 80 Unknown Unknown

1 个答案:

答案 0 :(得分:0)

import pandas as pd


data = [['2334','00001','50','Unknown'],['6754','00001','80','Unknown']]

df = pd.DataFrame(data, columns = ['a','b','c','d'])

df['e'] = df['d']

df.loc[df['d'] == 'Unknown', 'e'] = 'Not Unknown!'

完全为我工作。