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

Pandas append添加date_range序列后DataFrame为空报NDFrame.head错误

问题原因

  • pandas的append方法不会原地修改原有对象,只会返回新的拼接结果,你的代码没有将df['Date'].append(per2)的返回值赋值回原DataFrame的对应列,因此原有空df不会产生任何变化。
  • 初始0行的空DataFrame无需通过append方式填充数据,直接给对应列赋值长度匹配的日期序列的写法效率更高,也不需要额外将date_range转为Series。

可直接运行的修正代码

import pandas as pd

def date_calendar(startdate, enddate, datefreq):
    # 先生成所需的日期序列,直接作为Date列初始化DataFrame
    date_series = pd.date_range(start=startdate, end=enddate, freq=datefreq)
    df = pd.DataFrame({
        'Date': date_series
    })
    # 基于Date列生成其他衍生字段,也可根据业务需求自行调整计算规则
    df['Year'] = df['Date'].dt.year
    df['FY Year'] = '' # 可替换为你的财年计算逻辑
    df['Quarter'] = df['Date'].dt.quarter
    df['MonthNum'] = df['Date'].dt.month
    df['YearMonth'] = df['Date'].dt.strftime('%Y年%m月')
    df['YearMonthShort'] = df['Date'].dt.strftime('%y%m')
    df['YearMonthNum'] = df['Date'].dt.strftime('%Y%m').astype(int)
    return df

# 调用示例:原代码中的table参数未使用,已移除
calendar_df = date_calendar(startdate='1-1-2019', enddate='6-30-2024', datefreq='D')
print(calendar_df.head())

补充说明

如果确实需要沿用先建空df再append的逻辑,需要将append的结果赋值回对应列,同时指定ignore_index=True避免索引冲突,示例如下:

# 仅作append用法演示,实际场景不推荐该写法
df['Date'] = df['Date'].append(per2, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:57:03