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

如何在不转换列名类型的情况下调用整数列名筛选DataFrame?

解决方案:整数列名直接筛选DataFrame

错误原因分析

  1. Trial 1 报错:isin()方法要求传入列表/可迭代对象,直接传单个整数0/1不符合参数要求,因此抛出类型错误。
  2. Trial 2 报错:df.loc[:, [2]]返回的是DataFrame对象(而非Series),调用isin()后得到的是布尔值组成的DataFrame。当尝试用&组合条件时,pandas会尝试对齐索引,导致Timestamp类型的索引和整数布尔值出现不兼容的比较操作,触发类型错误。

正确实现方式

直接通过整数列名获取Series(而非DataFrame),再执行筛选操作即可,无需转换列名为字符串:

# 直接用整数列名获取Series,执行条件筛选
df_filtered = df[(df[2].isin([0])) & (df[8].isin([1]))]

# 后续groupby也可直接使用整数列名
dfd = {'{0[0]}{0[1]}'.format(i): x for i, x in df_filtered.groupby([2, 8])}

也可以用loc语法获取单个列的Series:

df_filtered = df[(df.loc[:, 2].isin([0])) & (df.loc[:, 8].isin([1]))]

关键说明

  • 当你用df.loc[:, [2]](带方括号的列表形式)时,返回的是包含单列的DataFrame;而df.loc[:, 2](单个整数)或df[2]返回的是该列的Series。
  • 布尔筛选需要用布尔值Series来匹配DataFrame的行索引,这样才能正确完成行筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32