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

使用Pandas向空列表添加元素时过滤条件失效问题求助

问题分析与修正

代码里的核心问题

  1. 判断条件错误:if ([Leg['Total'] > 500])逻辑完全不对。Leg['Total'] > 500返回的是布尔型Series(每个元素对应是否满足Total>500),把它放进列表里判断时,这个条件永远为真,导致循环每一行都被添加到Total列表,自然包含所有元素。
  2. 遍历对象错误:你遍历的是整个原始df,而非已经筛选出的传奇宝可梦子集Leg,逻辑偏离需求。
  3. 变量名冲突:先通过plt.subplots定义了子图变量Normal,后面又把同名变量赋值为普通宝可梦的DataFrame,会导致子图引用被覆盖,后续无法用该子图绘图。

修正方案(推荐用Pandas向量操作,高效简洁)

直接通过布尔索引筛选符合条件的记录,再提取列转成列表,无需循环:

from matplotlib import pyplot as plt
import pandas as pd

plt.style.use('ggplot')
df = pd.read_csv('C:/Users/Gemxs/Documents/Python/Pandas/pokemon.csv')

# 子图变量改名,避免和数据变量冲突
fig1, (ax_legendary, ax_normal) = plt.subplots(nrows=2, ncols=1)

# 一步筛选:传奇宝可梦 + Total>500,提取Total列转列表
Total = df[(df['Legendary'] == True) & (df['Total'] > 500)]['Total'].tolist()

print(Total)

如果非要用循环实现

遍历筛选后的传奇宝可梦子集,判断单条记录的Total值:

from matplotlib import pyplot as plt
import pandas as pd

plt.style.use('ggplot')
df = pd.read_csv('C:/Users/Gemxs/Documents/Python/Pandas/pokemon.csv')

fig1, (ax_legendary, ax_normal) = plt.subplots(nrows=2, ncols=1)

Total = []
gen = []

# 筛选传奇宝可梦子集
Leg = df[df['Legendary'] == True]

# 遍历子集,判断单条记录的Total值
for index, row in Leg.iterrows():
    if row['Total'] > 500:
        Total.append(row['Total'])

print(Total)

额外提示

  • Pandas的向量操作比iterrows循环高效得多,数据量大时差距明显,优先用向量操作。
  • 变量命名要避免冲突,子图变量和数据变量尽量用不同名称,比如子图变量用ax_xxx的形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:32:56