Pandas合并两个DataFrame后如何消除NaN值 附代码及学习建议求助
问题解决方案
你之前使用pd.concat按行(axis=0)拼接列数不同的两个DataFrame时,pandas会自动对齐列名,列数少的Us数据对应的缺失列会被填充为NaN;后续使用axis=0的前向填充是按行从上到下填充,自然会把前半部分Ds的最后一行数据填充到后面Us行的空列中,和你的需求不匹配。
结合你给出的完整处理流程,推荐调整方案如下:
- 拆分后区分字段前缀,按列拼接同一条原始数据的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)
- 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
相关产品推荐
相关产品推荐

