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

如何获取DataFrame中值介于-1到1之间的列名?

问题描述

我用以下代码生成了一个DataFrame:

import numpy as np
import pandas as pd

random_number_gen = np.random.default_rng()
df = pd.DataFrame(random_number_gen.integers(-5, 5, size=(1, 13)), columns=list('ABCDEFGHIJKLM'))

示例数据如下:

ABCDEFGHIJKLM
014-4-13-5-30-4-132

我想获取值介于-1到1之间的列名,尝试了以下代码但没成功:

df.columns[(( -1<= df.any()) & (df.any() <=1)).iloc[0]]
解决方案

你的问题出在df.any()的用法上——any()是判断列中是否存在至少一个满足条件的值,而非直接获取列的数值。由于你的DataFrame只有一行,直接提取这行数据进行判断即可:

方法1:提取行数据后筛选

# 提取唯一的一行数据
row = df.iloc[0]
# 筛选出值在[-1,1]区间内的列名
target_cols = row[(row >= -1) & (row <= 1)].index.tolist()

针对示例数据运行后,会得到结果 ['A', 'B', 'E', 'I', 'K'],符合预期。

方法2:链式简化写法

也可以不用单独提取行,直接链式调用完成筛选:

target_cols = df.columns[(df.iloc[0] >= -1) & (df.iloc[0] <= 1)]

原代码失败原因

df.any()返回的是布尔值(每列是否存在至少一个True),用它和数值进行比较会导致逻辑错误,自然无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:45:42