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

Pandas中拼接浮点数列生成无NaN的新Series问题

Pandas中拼接浮点数列生成无NaN的新Series问题

嘿,看了你的问题,我明白你想要把A、B、D三列里所有非NaN的浮点数值垂直拼起来,生成一个新的Series或者列对吧?你之前的代码问题出在notna()上——这个方法返回的是布尔值(True/False),而不是你要保留的原浮点数值,所以结果肯定不是你想要的。

下面给你两种简单可行的解决方案:

方法一:逐列提取非NaN值后拼接

这种方法直接明了,适合列数不多的情况:

import pandas as pd

# 假设你的数据框是df,先分别提取每列的非NaN值,再垂直拼接
combined_series = pd.concat(
    [df['A'].dropna(), df['B'].dropna(), df['D'].dropna()],
    ignore_index=True  # 重置索引,避免原索引重复混乱
)

# 如果需要把这个Series作为新列添加到原DataFrame,注意:
# 原DataFrame的行数和新Series的长度大概率不一致,直接赋值会自动用NaN填充缺失行,比如:
df['A+B+D'] = combined_series.reindex(df.index)

这里dropna()的作用就是移除列中的NaN值,只保留有效的浮点数值,再用pd.concat()把这些干净的Series垂直堆叠起来。

方法二:用melt转长格式后过滤NaN

如果需要处理的列比较多,这种方法更高效,不用逐列写dropna():

# 先把A、B、D列转成长格式,同时指定值列的名称
melted_df = df.melt(
    value_vars=['A', 'B', 'D'],  # 指定要处理的列
    value_name='A+B+D'  # 新值列的名称
)

# 过滤掉NaN值,再提取结果Series
combined_series = melted_df.dropna(subset=['A+B+D'])['A+B+D'].reset_index(drop=True)

melt()会把指定的列“拉长”成两列(原列名和对应值),之后我们只需要过滤掉值为NaN的行,就能得到所有有效数值的集合。

两种方法都能得到你想要的、只包含非NaN浮点数值的垂直拼接结果,你可以根据自己的列数多少选择合适的方式~

备注:内容来源于stack exchange,提问作者James S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:30:27