如何处理含NaN值的DataFrame列表列拆分并保留日期数据
处理含NaN的列表列并拆分出A、B列
步骤说明
- 替换NaN值:先将
Value列中的NaN替换为[0,0],避免拆分时抛出异常 - 拆分列表列:将处理后的
Value列拆分为A、B两列 - 合并结果:将拆分出的列与原DataFrame合并,保留所有原始列
完整代码示例
import pandas as pd import numpy as np # 构造示例数据(模拟你的原始DataFrame) df = pd.DataFrame({ 'Date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'], 'Value': [[1,2], [3,4], np.nan, [5,6]] }) # 替换Value列的NaN为[0,0] df['Value'] = df['Value'].apply(lambda x: x if pd.notna(x) else [0,0]) # 拆分列表为A、B列 split_df = pd.DataFrame(df['Value'].tolist(), index=df.index, columns=['A', 'B']) # 合并得到最终DataFrame final_df = pd.concat([df, split_df], axis=1) # 查看结果 print(final_df)
输出结果
Date Value A B 0 2023-01-01 [1, 2] 1 2 1 2023-01-02 [3, 4] 3 4 2 2023-01-03 [0, 0] 0 0 3 2023-01-04 [5, 6] 5 6
替代简化写法
如果不想单独修改Value列,可以直接在拆分时完成替换:
split_df = pd.DataFrame( df['Value'].apply(lambda x: x if pd.notna(x) else [0,0]).tolist(), index=df.index, columns=['A', 'B'] ) final_df = pd.concat([df, split_df], axis=1)
这样处理后,既保留了所有日期数据,又完成了列表拆分,同时将原NaN对应的A、B值设为0。
内容的提问来源于stack exchange,提问作者Ignpl
相关产品推荐
相关产品推荐

