如何用Python将周度ni数据拆分至每日并生成独立日期索引
解决每周数据填充至每日的方案
注意你给出的示例中07-01-1995应为笔误(原始数据起始日期是07-31-1995),实际处理后会生成从每周一到当周周日的所有日期,并填充对应周的数值。以下是可行的代码方案:
步骤1:读取并预处理原始数据
首先读取bill.txt文件,解析日期和数值,确保日期格式正确转换为datetime类型(关键:指定格式为%m-%d-%Y,避免解析错误)。
import pandas as pd # 读取文件,指定分隔符为冒号,自定义列名 df = pd.read_csv('bill.txt', sep=':', header=None, names=['date', 'value']) # 转换日期为datetime类型,明确格式是月-日-年 df['date'] = pd.to_datetime(df['date'], format='%m-%d-%Y') # 将日期设为DataFrame索引,方便后续时间序列操作 df = df.set_index('date')
步骤2:生成连续日期并填充数据
生成从第一个记录日期到最后一个记录日期后6天的每日连续日期(确保覆盖最后一周的所有天数),然后用**前向填充(ffill)**将每周一的数值填充至该周剩余天数。
# 生成连续每日日期范围 date_range = pd.date_range(start=df.index.min(), end=df.index.max() + pd.Timedelta(days=6), freq='D') # 重新索引并前向填充数据 df_daily = df.reindex(date_range).ffill()
步骤3:导出为目标格式文件
将处理后的日期转回MM-DD-YYYY格式,以冒号分隔保存为新文件(比如daily_bill.txt)。
# 重置索引,恢复日期列为普通列 df_daily = df_daily.reset_index().rename(columns={'index': 'date'}) # 格式化日期为指定字符串格式 df_daily['date'] = df_daily['date'].dt.strftime('%m-%d-%Y') # 导出文件,不保留索引和表头 df_daily.to_csv('daily_bill.txt', sep=':', index=False, header=False)
常见报错原因及解决
- 日期解析错误:未指定
format='%m-%d-%Y',pandas可能误将日期识别为日-月-年导致错误,必须明确格式。 - resample使用不当:若用
resample('W').ffill(),默认周起始是周日,会导致数据周划分错误,需改为resample('W-MON').ffill()(但本方案用reindex+ffill更直接)。 - 索引类型错误:未将日期设为datetime索引就使用时间序列方法(如resample),会触发类型错误,必须先转换索引类型。
内容的提问来源于stack exchange,提问作者Help Me
相关产品推荐
相关产品推荐

