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

如何无需嵌套循环同时遍历DataFrame行列,提取含数值单元格的索引与列名?

无需嵌套循环的简便解法

当然有啦!用pandas内置的stack()方法就能完美解决这个需求,全程不需要手动写嵌套循环,代码简洁还高效。

步骤详解:

  1. 先构造示例DataFrame(和你给出的结构一致):
import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'A': [np.nan, np.nan, np.nan],
     'B': [np.nan, 4, np.nan],
     'C': [np.nan, np.nan, 5]},
    index=['04/04/18', '05/04/19', '06/04/20']
)
  1. 用stack()提取非NaN单元格:
    stack()方法会自动剔除所有包含NaN的单元格,把剩余有效数据整理成一个Series,它的索引是原行索引+列名的多层元组:
stacked_series = df.stack()

此时stacked_series的输出为:

05/04/19  B    4.0
06/04/20  C    5.0
dtype: float64
  1. 处理索引生成目标字符串列表:
    我们只需要把多层索引的元组反转(列名在前,行索引在后),用'-'拼接成字符串,再转成列表即可。这里用index.map()做向量式操作,比列表推导更高效:
result = stacked_series.index.map(lambda idx_tuple: f"{idx_tuple[1]}-{idx_tuple[0]}").tolist()

最终result就是你想要的:["B-05/04/19","C-06/04/20"]

一行代码简化版:

如果想更紧凑,还可以把步骤合并成一行:

result = df.stack().index.map(lambda x: f"{x[1]}-{x[0]}").tolist()

这个方法完全利用了pandas的向量化操作,避免了手动循环,处理大DataFrame时效率优势会更明显~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:32:13