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

Pandas索引完全匹配时列仍被赋值NaN的问题排查

问题原因与解决方案

问题根源

你执行赋值时得到NaN的核心原因是:str.split(expand=True)生成的临时DataFrame列名为0和1,而你试图将其赋值给原DataFrame的date、time列时,pandas会按列名匹配进行赋值——由于两边列名不对应,最终所有值被填充为NaN。

解决方案

方案1:重命名拆分后的列再赋值

先给拆分结果指定对应列名,再完成赋值:

split_result = df.index.astype(str).to_series().str.split(' ', expand=True)
split_result.columns = ['date', 'time']
df[['date', 'time']] = split_result

方案2:直接使用位置值赋值

跳过列名匹配,直接用拆分结果的底层数值数组赋值:

df[['date', 'time']] = df.index.astype(str).str.split(' ', expand=True).values

方案3:利用DatetimeIndex的原生属性提取(推荐)

无需转换为字符串,直接通过dt属性提取日期和时间,效率更高且更可靠:

df['date'] = df.index.date.astype(str)
df['time'] = df.index.time.astype(str)

验证结果

执行任意一种方案后,DataFrame将正确生成date和time列:

date      time      val
2015-01-02 09:30:00  2015-01-02  09:30:00  64.8150
2015-01-02 09:35:00  2015-01-02  09:35:00  64.8741
2015-01-02 09:40:00  2015-01-02  09:40:00  64.8741
2015-01-02 09:45:00  2015-01-02  09:45:00  64.8741
2015-01-02 09:50:00  2015-01-02  09:50:00  64.8741
2015-01-02 09:55:00  2015-01-02  09:55:00  65.0255
2015-01-02 10:00:00  2015-01-02  10:00:00  64.9269
2015-01-02 10:05:00  2015-01-02  10:05:00  64.9269

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:15:32