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

如何按DataFrame列条件将对应值加入列表?代码报错求助

解决Pandas KeyError:无法访问Y列对应行值的问题

嘿,我一眼就看到问题出在哪了——你在y_values.append(df[y_column][row])这里犯了个典型的Pandas索引错误!

错误原因

row是你从df[x_column]里拿到的X列的具体数值(比如报错里的291061),但你用它去索引Y列的时候,Pandas会把它当成DataFrame的行索引来查找。如果你的DataFrame行索引不是X列的数值(比如默认的0、1、2…这种自增索引),那肯定找不到对应的行,自然就抛出KeyError了。

修复方案

给你两种靠谱的解决办法,按需选择:

方法1:用iterrows()遍历每一行(适合小数据集)

这种方式能直接拿到每一行的完整数据,同时获取X和Y的值,不会搞混索引:

df = customer_codes
x_column = 'X'
y_column = 'Y'
num_intervals = 10
maximum = df[x_column].max()
interval = maximum/num_intervals
intervals = []
i = 0
while i <= num_intervals:
    value = int(i * interval)
    intervals.append(value)
    i = i + 1

# 记得先初始化列表!
x_values = []
y_values = []

# 改用iterrows遍历,拿到每行的索引和数据
for _, row_data in df.iterrows():
    current_x = row_data[x_column]
    for interval in intervals:
        if current_x >= interval:
            x_values.append(current_x)
            y_values.append(row_data[y_column])

方法2:用Pandas布尔索引(更高效,推荐大数据集)

Pandas天生适合向量化操作,循环遍历行效率很低,用布尔筛选能快很多:

df = customer_codes
x_column = 'X'
y_column = 'Y'
num_intervals = 10
maximum = df[x_column].max()
interval = maximum/num_intervals
# 用列表推导式简化interval生成
intervals = [int(i * interval) for i in range(num_intervals + 1)]

x_values = []
y_values = []

for interval in intervals:
    # 直接筛选出X列大于等于当前interval的所有行
    filtered_rows = df[df[x_column] >= interval]
    # 把筛选后的X、Y值批量加入列表
    x_values.extend(filtered_rows[x_column].tolist())
    y_values.extend(filtered_rows[y_column].tolist())

额外提醒

看你的代码逻辑,同一个X值可能会被多次加入列表(比如它会满足>=0、>=interval、>=2*interval等多个条件),如果这不是你想要的(比如你是想把X值分到对应的区间里),那可能需要调整判断逻辑,比如用pd.cut()来做区间划分,这样能更精准地分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:47