pandas update更新筛选DF时num_posts列未同步问题
错误原因
你的代码bug出在日期增量计算的步骤:
# 错误代码 df1 = df1['date'] + pd.DateOffset(months=plus_month_period)
这行代码直接把原本包含num_posts/date/user三列的DataFrame类型的df1,重新赋值成了仅存储date列计算结果的单列Series。你之前已经修改好的num_posts=10的内容随着变量覆盖被完全丢弃了。df.update()是按照索引对齐+列名匹配的规则更新值的,传入的df1里已经没有num_posts列了,自然只会更新date列,num_posts列不会有任何变化。
修复方法
不要整体覆盖df1变量,仅对df1的date列做赋值修改即可,修正后的完整代码:
import pandas as pd import datetime df = pd.DataFrame({'num_posts': [5, 4, 4, 4, 1, 14], 'date': ['2022-06-10', '2022-06-14', '2022-06-14', '2020-09-12', '2020-09-29', '2020-10-15'], 'user': ['user4', 'user1', 'user1', 'user3', 'user4', 'user4']}) df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') # 获取当前日期 new_date = datetime.datetime.now() current_date = new_date.strftime("%Y-%m-%d") # 筛选目标行 df1 = df.loc[(df['num_posts'] == 4) & (df['date'] == current_date)].copy() # 修改num_posts为10 df1['num_posts'] = 10 # 日期增加1个月:仅修改date列,不覆盖整个df1 plus_month_period = 1 df1['date'] = df1['date'] + pd.DateOffset(months=plus_month_period) # 同步回原DataFrame df.update(df1) print(df)
效果验证
运行修复后的代码,输出结果和你预期完全一致:符合筛选条件的行num_posts更新为10,日期顺延1个月,其余行数据保持不变。
内容的提问来源于stack exchange,提问作者Bernietechy
相关产品推荐
相关产品推荐

