筛选DataFrame后为指定单元格赋值失效,求解决方案
解决DataFrame指定单元格赋值不生效的问题
问题原因
你当前的代码操作的是原DataFrame的临时副本,而非原数据本身:
df.loc[df['name']=='aagicampus'].reset_index(drop=True).at[0,'words']='test'
df.loc[df['name']=='aagicampus']返回的是原DataFrame的切片副本,后续reset_index(drop=True)又生成了新的DataFrame对象,最后对这个临时对象的赋值不会同步到原df中。
正确解决方案
以下两种方法直接操作原DataFrame,修改会立即生效,且保留原DataFrame用于后续操作:
方法1:直接用loc批量/精准赋值
如果要给所有name等于aagicampus的行的words列赋值,直接用loc定位行和列:
df.loc[df['name'] == 'aagicampus', 'words'] = 'test'
若确定只有一行匹配,这个写法同样精准,且效率更高。
方法2:用at定位单个单元格(精确到行索引)
如果需要明确指定单个单元格,先获取目标行的索引,再用at修改:
# 获取匹配行的第一个索引 target_index = df[df['name'] == 'aagicampus'].index[0] # 修改原DataFrame的对应单元格 df.at[target_index, 'words'] = 'test'
内容的提问来源于stack exchange,提问作者Albeiro Gonzalez
相关产品推荐
相关产品推荐

