如何利用Datetime扩展Pandas DataFrame并补全缺失日期?
解决Pandas DataFrame扩展缺失日期并填充NaN的问题
我来帮你完成这个需求,核心是将原数据的日期列转为索引,然后重新索引到完整的日期范围,再调整排序顺序即可。下面是具体步骤和完整代码:
步骤分解
- 处理原DataFrame的日期列:首先要把第一列的字符串日期转换成Pandas可识别的日期类型,并设置为DataFrame的索引,这样才能和后续的完整日期范围对齐。
- 创建完整的日期范围:生成包含你需要的所有日期(2001-01-22到2001-01-26)的DatetimeIndex。
- 重新索引并排序:用
reindex方法把原数据映射到完整日期范围,缺失的日期会自动填充NaN,最后按索引降序排列得到你要的顺序。
完整代码实现
import pandas as pd import numpy as np # 如果你是从CSV读取数据,注意你的数据是空格分隔,所以sep要设置为匹配任意空格 # df = pd.read_csv(fi, header=None, sep=r'\s+') # 先模拟你的原数据 data = [ ['1/25/2001', 1364.3, 1367.35, 1354.63], ['1/24/2001', 1360.4, 1369.75, 1357.28], ['1/23/2001', 1342.9, 1362.9, 1339.63] ] df = pd.DataFrame(data) # 步骤1:转换日期列并设置为索引 df[0] = pd.to_datetime(df[0], format='%m/%d/%Y') df = df.set_index(0) # 步骤2:创建完整的日期范围(包含2001-01-22到2001-01-26) full_date_range = pd.date_range(start='2001-01-22', end='2001-01-26') # 步骤3:重新索引并按日期降序排序 res = df.reindex(full_date_range).sort_index(ascending=False) print(res)
代码细节说明
pd.to_datetime(df[0], format='%m/%d/%Y'):明确指定日期格式,避免Pandas自动解析出错,确保字符串日期能正确转为datetime类型。pd.date_range:相比np.arange,这个方法更适配Pandas的日期处理,直接生成DatetimeIndex,后续和原索引对齐更顺畅。reindex(full_date_range):将原DataFrame的索引替换为完整日期范围,缺失的日期对应的行自动填充NaN。sort_index(ascending=False):把结果按日期从新到旧排序,和你需要的输出顺序完全一致。
最终输出结果
运行代码后会得到你想要的结果:
1 2 3 2001-01-26 NaN NaN NaN 2001-01-25 1364.30 1367.35 1354.63 2001-01-24 1360.40 1369.75 1357.28 2001-01-23 1342.90 1362.90 1339.63 2001-01-22 NaN NaN NaN
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

