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

如何将Python列表插入Pandas DataFrame指定行并设其余值为NaN

向Pandas DataFrame的日期索引中插入指定日期行(其余值为NaN)

问题需求

需将Python列表中的日期作为新行插入已有DataFrame的Date索引列,新插入行的其余列值设为NaN。

示例日期列表

list_dates = ['2021-12-01', '2021-12-02', '2021-12-03', '2021-12-06', '2021-12-08']

现有DataFrame片段

df_sentiment.iloc[10:20, : 10]
ticker      AAPL.OQ ABBV.N      ABT.N       ACN.N   ADBE.OQ     AIG.N       AMD.OQ  AMGN.OQ     AMT.N   AMZN.OQ
Date                                        
2021-11-24  NaN     NaN         NaN         NaN     NaN         NaN         NaN     0.632792    NaN     NaN
2021-11-25  NaN     0.211714    NaN         0.846193    0.210173    NaN         NaN     0.043700    NaN     NaN
2021-11-26  NaN     0.115301    -0.629839   NaN     0.081402    -0.287198   NaN     NaN            -0.448907 NaN
2021-11-27  NaN     NaN         0.384544    NaN     0.490425    -0.003641   0.253752    NaN             NaN     NaN
2021-11-28  NaN     NaN         0.036393    NaN     0.003484    NaN         NaN     0.056091    NaN     NaN
2021-11-29  0.163266 -0.165520  0.149920    NaN     -0.014639   -0.448595   0.097651    0.381039    0.058590 -0.016986
2021-11-30  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN         NaN     0.557565 
2021-12-07  NaN     NaN         NaN         0.097732    NaN         NaN         NaN     NaN         NaN     NaN
2021-12-09  NaN     NaN         NaN         NaN     NaN         NaN         NaN         NaN         NaN     NaN
2021-12-10  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN         NaN     NaN

期望的更新后DataFrame片段

df_sentiment.iloc[10:20, : 10]
ticker      AAPL.OQ ABBV.N      ABT.N       ACN.N   ADBE.OQ     AIG.N       AMD.OQ  AMGN.OQ     AMT.N   AMZN.OQ
Date                                        
2021-11-24  NaN     NaN         NaN         NaN     NaN         NaN         NaN     0.632792    NaN     NaN
2021-11-25  NaN     0.211714    NaN         0.846193    0.210173    NaN         NaN     0.043700    NaN     NaN
2021-11-26  NaN     0.115301    -0.629839   NaN     0.081402    -0.287198   NaN     NaN            -0.448907 NaN
2021-11-27  NaN     NaN         0.384544    NaN     0.490425    -0.003641   0.253752    NaN             NaN     NaN
2021-11-28  NaN     NaN         0.036393    NaN     0.003484    NaN         NaN     0.056091    NaN     NaN
2021-11-29  0.163266 -0.165520  0.149920    NaN     -0.014639   -0.448595   0.097651    0.381039    0.058590 -0.016986
2021-11-30  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN         NaN     0.557565 
2021-12-01  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN     NaN     NaN
2021-12-02  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN     NaN     NaN
2021-12-03  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN     NaN     NaN
2021-12-06  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN     NaN     NaN
2021-12-07  NaN     NaN         NaN         0.097732    NaN         NaN         NaN     NaN         NaN     NaN
2021-12-08  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN     NaN     NaN
2021-12-09  NaN     NaN         NaN         NaN     NaN         NaN         NaN         NaN         NaN     NaN
2021-12-10  NaN     NaN         NaN         NaN     NaN         NaN         NaN     NaN         NaN     NaN

尝试过的方法

使用append和concat方法未成功或出现错误,寻求正确实现方式。


正确实现方式

推荐使用**重新索引(reindex)**的方式,这是Pandas处理日期索引补全最简洁高效的方案,步骤如下:

  1. 将目标日期列表转换为datetime类型,确保与原DataFrame索引类型一致
  2. 合并原索引与新日期列表,去重并生成有序的完整索引
  3. 对原DataFrame重新索引,缺失值自动填充为NaN

代码实现

import pandas as pd

# 1. 转换日期列表为datetime类型
new_dates = pd.to_datetime(list_dates)

# 2. 合并原索引与新日期,去重后排序
full_index = df_sentiment.index.union(new_dates).sort_values()

# 3. 重新索引DataFrame
df_sentiment = df_sentiment.reindex(full_index)

补充说明

  • union()方法会自动去除重复项,若原DataFrame已存在目标日期,不会重复插入
  • sort_values()保证索引按时间顺序排列,符合时间序列数据的逻辑
  • reindex()默认将新增行的所有列值填充为NaN,完全匹配需求

如果之前使用concat失败,通常是因为未正确构造匹配列的空DataFrame。若坚持用concat,正确写法如下:

# 构造包含新日期的空DataFrame
empty_df = pd.DataFrame(index=new_dates, columns=df_sentiment.columns)
# 合并后排序索引
df_sentiment = pd.concat([df_sentiment, empty_df]).sort_index()

但此方法需手动处理去重,效率和简洁性不如reindex。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:54:54