如何在Pandas中删除NaN值但保留列?实现指定数据转换
Pandas 合并含NaN的DataFrame为单行非NaN值
问题场景
原DataFrame:
A B C 0 0.0 NaN NaN 1 NaN 1.0 NaN 2 NaN NaN 2.0
目标格式(保留所有列,仅保留每列的非NaN值合并为一行):
A B C 0 0 1 2
解决方案
有几种简洁的方法可以实现:
方法1:通用型(支持任意数据类型)
对每列提取第一个非NaN值,再转成DataFrame:
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({ 'A': [0, np.nan, np.nan], 'B': [np.nan, 1, np.nan], 'C': [np.nan, np.nan, 2] }) result = df.agg(lambda x: x.dropna().iloc[0]).to_frame().T
方法2:数值型列专用
如果你的列都是数值类型,直接用max()或sum()(NaN会被自动忽略):
result = df.max().to_frame().T # 或者用sum(),结果一致 # result = df.sum().to_frame().T
方法3:填充法
先向前填充再向后填充,确保所有行都得到有效数值,再取第一行:
result = df.ffill().bfill().head(1)
说明
- 方法1兼容性最强,不管列是数值、字符串还是其他类型都能正常提取非NaN值;
- 方法2代码最简洁,但仅适合数值型数据;
- 方法3适合每列至少存在一个非NaN值的场景,填充后取首行即可得到目标结果。
内容的提问来源于stack exchange,提问作者Aryaman
相关产品推荐
相关产品推荐

