DataFrame查询时'int'不可迭代错误的原因及解决方法
pandas DataFrame.query() 报错 TypeError 的原因与解决方法
错误原因
问题核心是带空格的列名Plaza ID的引用方式错误:
在你的query()语句中,用单引号包裹'Plaza ID',pandas会将其解析为字符串字面量,而非DataFrame的列名。这导致代码实际在执行字符串 == 整数的无效比较,后续pandas内部处理时,错误地将整数5当作可迭代对象尝试x in y操作,最终抛出TypeError: argument of type 'int' is not iterable。
解决方法
方法1:用反引号包裹带空格的列名(推荐)
这是query()方法中处理含空格/特殊字符列名的标准方式:
# 使用 & 作为逻辑运算符 sample_to_work_on = df.query("`Plaza ID` == 5 & Date > '2016-12-30' & Date < '2017-05-01'") # 或用 and 替代 &,可读性更好 sample_to_work_on = df.query("`Plaza ID` == 5 and Date > '2016-12-30' and Date < '2017-05-01'")
方法2:使用布尔索引替代query()
对于带空格的列名,直接用布尔索引的方式更直观,不易出错:
sample_to_work_on = df[(df['Plaza ID'] == 5) & (df['Date'] > '2016-12-30') & (df['Date'] < '2017-05-01')]
方法3:用DataFrame对象直接引用列名
在query()中通过df['列名']的方式指定带空格的列:
sample_to_work_on = df.query("df['Plaza ID'] == 5 & Date > '2016-12-30' & Date < '2017-05-01'")
内容的提问来源于stack exchange,提问作者eren9677
相关产品推荐
相关产品推荐

