You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用df.at[] +=x给DataFrame单元格增量报错且astype转类型不生效如何解决

问题修复方案

错误根源

  • pandas的astype()方法不属于原地操作,仅会返回类型转换后的新序列,你没有将转换结果赋值回原列,因此年份列始终是字符串类型,执行+=1操作时会触发字符串拼接的类型错误
  • 初始化年份列时你直接赋值了字符串格式的"0",属于不必要的操作,直接用整数0初始化就可以从根源规避类型问题

最快修复方法

直接修改年份列的初始化逻辑,替换掉字符串0,删除无效的类型转换行即可:

for y in unique_years:
    missing_days_df = pd.DataFrame({'Days': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
                                             'Saturday']})
    # 直接用整数0初始化列,不要加引号
    missing_days_df[y] = 0
    gold_days_year = pd.to_datetime(dates[dates.dt.year == y])
    normal_days_year = pd.date_range(start=gold_days_year[0], end=gold_days_year.iloc[-1], freq='D')
    missing_for_year = pd.to_datetime(normal_days_year[~normal_days_year.isin(gold_days_year)])
    week_days = pd.Series(missing_for_year.day_name())
    for x in week_days:
        k = missing_days_df[missing_days_df['Days'] == x].index.tolist()
        k = int(k[0])
        missing_days_df.at[k, y] += 1

可选优化写法

可以用内置的统计方法替代嵌套循环,代码更简洁执行效率更高:

for y in unique_years:
    # 初始化周几基表
    missing_days_df = pd.DataFrame({'Days': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']})
    # 计算当年缺失日期的周几分布
    gold_days_year = pd.to_datetime(dates[dates.dt.year == y])
    normal_days_year = pd.date_range(start=gold_days_year.iloc[0], end=gold_days_year.iloc[-1], freq='D')
    weekday_count = pd.Series(normal_days_year[~normal_days_year.isin(gold_days_year)].day_name()).value_counts()
    # 直接映射赋值填充
    missing_days_df[y] = missing_days_df['Days'].map(weekday_count).fillna(0).astype(int)

内容的提问来源于stack exchange,提问作者JacobMarlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:01