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

筛选Pandas DataFrame列表时触发TypeError索引类型错误

报错原因

报错的核心问题是Python原生列表不支持用布尔序列做索引:

  • 你定义的merged_df是装了4个DataFrame的普通列表,列表的索引只接受整数、切片(比如merged_df[0]取第一个元素是合法写法),不接受pandas生成的True/False布尔序列作为索引值,所以会抛出TypeError: list indices must be integers or slices, not Series。
  • 你单独对单个DataFrame做筛选能正常运行,是因为pandas DataFrame原生支持布尔索引,和普通列表的索引规则完全不同。

把多个DataFrame存入列表统一管理本身是合理的写法,只是你索引的写法写错了层级。

实现方案

根据你的实际需求选对应写法即可:

方案1:仅筛选列表中某一个DataFrame

如果你只是想筛选列表里的第一个DataFrame(也就是daily_df),要先通过索引从列表里取出对应DataFrame,再做布尔筛选:

# 先取merged_df[0]拿到daily_df,再执行筛选
condition1_data = merged_df[0][(merged_df[0]['change'] > 2) & (merged_df[0]['high'] > 4) ]
print(condition1_data)

方案2:批量对列表里所有DataFrame执行相同筛选

如果要给4个周期的DataFrame都套同一个筛选条件,直接遍历列表处理即可:

import pandas as pd
import numpy as np

pd.set_option('display.max_rows', None)

daily_df = pd.read_csv (r'Data\\CSV\daily.csv')
sixtymin_df = pd.read_csv (r'Data\\CSV\sixtymin.csv')
thirtymin_df = pd.read_csv (r'Data\\CSV\\thirtymin.csv')
fivemin_df = pd.read_csv (r'Data\\CSV\\fivemin.csv')
df_list = [daily_df, sixtymin_df, thirtymin_df, fivemin_df]
cycle_names = ["日线", "60分钟线", "30分钟线", "5分钟线"]

# 遍历逐个筛选
for cycle, df in zip(cycle_names, df_list):
    filtered_df = df[(df['change'] > 2) & (df['high'] > 4)]
    print(f"\n===== {cycle} 筛选结果 =====")
    print(filtered_df)

方案3:先合并所有DataFrame再统一筛选

如果你需要把所有周期的数据放在同一个表里筛选,可以先用pd.concat()把列表里的DataFrame合并成一个大表,再做筛选:

# 合并时增加cycle列标记数据所属周期,方便后续区分
merged_df = pd.concat(
    [df.assign(cycle=name) for name, df in zip(cycle_names, df_list)],
    ignore_index=True
)
# 直接对合并后的大表做筛选
condition1_data = merged_df[(merged_df['change'] > 2) & (merged_df['high'] > 4)]
print(condition1_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:27:16