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

遍历无行列名的10行×10001列Pandas DataFrame,查找小于-1的值

找出DataFrame中小于指定值的元素及其索引

对于列数较多(如10001列)的DataFrame,不推荐使用iterrows()——它逐行遍历的特性会导致效率极低。优先选择Pandas矢量化操作或numpy方法,既高效又简洁。

方法一:用stack() + 布尔索引(最直观)

import pandas as pd
import numpy as np

# 模拟你的无行列名DataFrame(故意加入一个小于-1的测试值)
df = pd.DataFrame(np.random.randn(10, 10001))
df.iloc[5, 9998] = -1.5  # 测试用的小于-1的值

# 转换为带MultiIndex的Series,筛选出目标元素
filtered_elements = df.stack()[df.stack() < -1]

# 遍历输出结果
for (row_idx, col_idx), value in filtered_elements.items():
    print(f"行索引: {row_idx}, 列索引: {col_idx}, 数值: {value}")

stack()会将DataFrame转换为Series,其索引是(行索引, 列索引)的组合,直接通过布尔索引筛选后即可遍历输出。

方法二:用numpy.where(性能最优)

import pandas as pd
import numpy as np

# 模拟数据
df = pd.DataFrame(np.random.randn(10, 10001))
df.iloc[7, 5000] = -2.3  # 测试值

# 获取所有满足条件的位置和数值
row_indices, col_indices = np.where(df < -1)
target_values = df.values[row_indices, col_indices]

# 输出结果
for row, col, val in zip(row_indices, col_indices, target_values):
    print(f"行索引: {row}, 列索引: {col}, 数值: {val}")

np.where直接返回满足条件的元素的行、列整数索引,再从DataFrame的底层数值数组中提取对应值,这种方法处理大数据量时速度最快。

若坚持使用iterrows()(不推荐)

如果一定要用iterrows()实现,代码如下,但注意10001列的场景下会非常慢:

import pandas as pd
import numpy as np

# 模拟数据
df = pd.DataFrame(np.random.randn(10, 10001))
df.iloc[3, 8000] = -1.2  # 测试值

for row_idx, row_data in df.iterrows():
    # 遍历当前行的每个元素(列索引+数值)
    for col_idx, value in row_data.items():
        if value < -1:
            print(f"行索引: {row_idx}, 列索引: {col_idx}, 数值: {value}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:15:34