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

如何从单个CSV创建各月独立DataFrame并重置索引为1起始

解决方法

首先得确保你的DataFrame里的日期列是datetime类型——这是按月份分组的前提,如果还没转,先做这一步:

import pandas as pd

# 读入CSV数据
df = pd.read_csv('你的数据文件.csv')
# 把日期列转成datetime格式(假设列名叫'date',根据你的实际情况修改)
df['date'] = pd.to_datetime(df['date'])

接下来就可以按年份+月份分组拆分了,这样能区分开不同年份的同一个月(比如2021年1月和2022年1月)。拆分的时候直接给每个子DataFrame重置索引,让它从1开始:

# 用字典存每个月的DataFrame,键是"年份-月份",方便后续调用
monthly_dfs = {}
for (year, month), group in df.groupby([df['date'].dt.year, df['date'].dt.month]):
    # 先删掉原索引,生成从0开始的新索引,再加1变成从1起始
    grouped_df = group.reset_index(drop=True)
    grouped_df.index += 1
    # 给这个月的DataFrame起个标识名,比如"2021-1"
    monthly_dfs[f"{year}-{month}"] = grouped_df

嫌循环麻烦?用字典推导式一行搞定:

monthly_dfs = {
    f"{y}-{m}": g.reset_index(drop=True).set_index(pd.RangeIndex(start=1, stop=len(g)+1))
    for (y, m), g in df.groupby([df['date'].dt.year, df['date'].dt.month])
}

验证方法

比如想查看2021年2月的数据,直接调用:

print(monthly_dfs['2021-2'].head())

你会看到索引从1开始,完全符合绘图的需求。

补充:为什么你之前的方法没效果?

用iloc截取只是把原DataFrame的某几行切出来,原索引会被保留。而reset_index(drop=True)会彻底移除原索引,生成全新的连续索引,之后我们把索引+1,或者用pd.RangeIndex直接创建从1开始的索引,就能解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:13:08