如何用列表推导式为Pandas DataFrame指定行的列赋值?
解决Pandas DataFrame批量修改特定行列值的问题
为什么你的列表推导式报错
列表推导式要求内部是表达式,而dataframe.loc[...] = 1是赋值语句,不属于表达式范畴,所以会触发SyntaxError。而且你本来的需求是修改DataFrame,不需要生成列表,用列表推导完全没必要。
正确的实现方式
方法1:用isin()批量处理(推荐,Pandas原生高效写法)
直接利用Pandas的向量化操作,一次性完成修改,比循环效率高得多:
dataframe.loc[dataframe['id'].isin(indexes), 'column_to_be_changed'] = 1
该语句会直接把所有id在indexes集合中的行的目标列值设为1。
方法2:普通for循环(若需逐元素处理)
如果必须逐个遍历indexes里的元素,用普通for循环即可,逻辑和你单独执行的有效语句一致:
for x in indexes: dataframe.loc[dataframe['id'] == x, 'column_to_be_changed'] = 1
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

