当另一个列的值等于列表中的一个值时,更改一个列的值

时间:2018-10-26 09:50:59

标签: python python-3.x pandas dataframe

我有一个包含几列的数据集。但是对于这个问题,只有两个很重要。 “正文”列和“有效”列,第一列是Twitter中的注释,第二列是ML算法的输出,该算法确定它对我正在处理的项目是否有效。

问题是我从“正文”列中获得了一条被错误预测的推文列表。我想做的是,如果正文列与rong_one(这是一个列表)中的任何值一致,则在“有效”列上更改该值。

因此,考虑到rong_one是一个列表,而raw_data是我的数据帧。

我已经尝试过了:

raw_data = pd.DataFrame(
{
   "SYS-ID":[1,2,3,4,5,6,7,8],
    "BODY":["LOL1","LOL","lol","a","b","C","hey","ho"],
    "VALID":[True,True,True,True,True,True,True,True]
})
wrong_one = ["LOL1,LOL"]

raw_data[raw_data['BODY'].isin(wrong_one), 'Valid'] = False

输出:TypeError:“系列”对象是可变的,因此不能被散列

1 个答案:

答案 0 :(得分:1)

有两个错误:

  • wrong_one是一个字符串的列表,您想要多个字符串的列表。
  • 行和列索引器的设置需要
  • pd.DataFrame.loc,而不是 pd.DataFrame.__getitem__(对于raw_data[]是语法糖)。

因此您可以使用:

wrong_one = ['LOL1', 'LOL']

raw_data.loc[raw_data['BODY'].isin(wrong_one), 'VALID'] = False

另请参阅官方文档中的Indexing and Selecting Data