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

如何将稀疏DataFrame中的非空值提取为单列?

更简洁高效的实现方案

直接借助pandas的原生向量化操作替代手动循环,代码更简洁且性能更优:

import pandas as pd

list1 = ["x1","x2","?","?","?","?"]
list2 = ["?","?","y1","y2","?","?"]
list3 = ["?","?","?","?","z1","z2"]

df_sparse = pd.DataFrame({"A":list1,"B":list2,"C":list3})

# 提取所有非"?"的值并转为列表
non_null_values = df_sparse.replace("?", pd.NA).stack().tolist()
# 赋值给新列D,自动匹配原DataFrame行数
df_sparse["D"] = non_null_values

display(df_sparse)

方案细节说明

  • replace("?", pd.NA):把自定义空值"?"转换为pandas标准缺失值标记,便于后续自动过滤
  • stack():将列维度的数据转成行维度,同时自动剔除缺失值,得到包含所有非空值的Series
  • tolist():将Series转换为列表,直接赋值给新列即可完成对齐(本例中非空值数量恰好等于原DataFrame行数,完美匹配)

对比原方案的优势

  • 完全避免手动循环和列表推导,代码逻辑更直观
  • 利用pandas内置优化的向量化操作,处理大规模数据集时性能显著优于手动循环
  • 代码行数更少,可读性更强

另一种等价实现方式(用melt筛选):

non_null_values = df_sparse.melt(value_name="D").query("D != '?'")["D"].tolist()
df_sparse["D"] = non_null_values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:05:32