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

Pandas合并两个DataFrame后如何消除NaN值 附代码及学习建议求助

问题解决方案

你之前使用pd.concat按行(axis=0)拼接列数不同的两个DataFrame时,pandas会自动对齐列名,列数少的Us数据对应的缺失列会被填充为NaN;后续使用axis=0的前向填充是按行从上到下填充,自然会把前半部分Ds的最后一行数据填充到后面Us行的空列中,和你的需求不匹配。
结合你给出的完整处理流程,推荐调整方案如下:

  1. 拆分后区分字段前缀,按列拼接同一条原始数据的Ds和Us内容
# 拆分Ds字段,所有列加ds_前缀避免和Us列重名
df1 = d1['hlogDs_dB'].str.split('[,:]', expand=True).astype(float).add_prefix('ds_')
# 拆分Us字段,所有列加us_前缀
df2 = d1['hlogUs_dB'].str.split('[,:]', expand=True).astype(float).add_prefix('us_')
# 按列方向拼接,同一条原始数据的Ds、Us拆分结果会合并到同一行,不会产生多余空值
df = pd.concat([df1, df2], axis=1)
  1. int值与对应float值排序处理
    如果拆分后的列是「int索引、float数值」交替存储的结构,可参考如下逻辑完成排序关联:
# 筛选Ds对应的int列、float列,可根据你的实际拆分结果调整筛选规则
ds_int_cols = [col for idx, col in enumerate(df1.columns) if idx % 2 == 0]
ds_float_cols = [col for idx, col in enumerate(df1.columns) if idx % 2 == 1]

# 单行排序函数:将同一条数据的int和对应float配对后按int排序
def sort_pairs(row, int_cols, float_cols):
    pairs = list(zip(row[int_cols], row[float_cols]))
    # 按int值升序排序
    pairs.sort(key=lambda x: x[0])
    # 展开为排序后的序列返回
    return pd.Series([x[0] for x in pairs] + [x[1] for x in pairs])

# 批量处理所有行的排序
df_ds_sorted = df1.apply(sort_pairs, axis=1, args=(ds_int_cols, ds_float_cols))
# Us数据的排序可复用上述逻辑,处理完成后再和Ds排序结果合并即可

后续你就可以基于排序后的结果执行自定义公式计算、可视化操作。

入门pandas学习资源推荐
  • pandas官方中文文档:入门优先看「10分钟入门pandas」「基础教程」板块,覆盖所有核心语法与常用函数
  • 国内主流教程平台的pandas入门专栏:知识点拆解细致,每个函数都配了可直接运行的小示例,适合边敲代码边学习
  • 高校公开数据分析课程配套pandas实操内容:结合真实业务场景讲解用法,能快速掌握pandas的实际应用逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:48:02