TypeError: 'Series'无法识别为整数 如何在range函数中使用DataFrame值
错误原因与解决方法
报错根因
df['Qty']返回的是一整个Series列对象,包含所有行的Qty值,不是单个整数,range()函数要求传入的上下限参数必须是单个整数,所以直接传入df['Qty']会触发类型错误- 直接写
if df['Qty'] > 15时,返回的是和行数等长的布尔Series,不是单个布尔值,也无法直接用于普通if判断
解决方法
1. 提取DataFrame单个值传入range
如果要取某一行的Qty值作为range的参数,需要用.iloc[]/.loc[]/.at[]定位到单个元素,比如取索引为'1'的第一行Qty值:
# 取指定行的Qty值,返回结果为整数类型 first_qty = df['Qty'].loc['1'] rng = range(0, first_qty, 1)
如果你的代码原本是想统计所有行的Qty总和,完全不需要手写循环,直接调用pandas内置方法即可:
nr_of_cars = df['Qty'].sum()
2. DataFrame列与普通值比较
- 如果要判断所有行的Qty是否都大于15,调用
.all()方法:
if (df['Qty'] > 15).all(): # 对应逻辑代码
- 如果要判断是否存在至少一行Qty大于15,调用
.any()方法:
if (df['Qty'] > 15).any(): # 对应逻辑代码
- 如果要统计Qty大于15的行数,直接对布尔Series求和即可,不需要手写if判断:
qty15 = (df['Qty'] > 15).sum()
修改后可运行的完整代码示例
import pandas as pd cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'], 'Qty': [20,34,12,43] } df = pd.DataFrame(cars, columns = ['Brand','Qty'], index=['1','2','3','4']) # 统计所有车辆总库存 nr_of_cars = df['Qty'].sum() # 统计库存大于15的车型数量 qty15 = (df['Qty'] > 15).sum() print(f"总车辆数:{nr_of_cars}") print(f"库存大于15的车型数:{qty15}") print(df)
内容的提问来源于stack exchange,提问作者user15070504
相关产品推荐
相关产品推荐

