在Pandas DataFrame中选择行子集时触发TypeError:需传入整数
解决Pandas选择DataFrame行子集时的
TypeError: an integer is required问题 嘿,我来帮你搞定这个烦人的错误!结合你提供的推特数据,咱们来拆解一下常见的触发原因和对应的解决办法:
1. 误用iloc进行标签索引
iloc是基于整数位置的索引工具,如果你给它传了字符串(比如推特的id_str)、字典或者其他非整数类型的值,就会抛出这个错误。
比如你可能写了这样的错误代码:
# 错误:用id_str字符串去调用iloc df.iloc['760563814450491392']
解决办法:
- 如果你的DataFrame用
id_str做索引,改用loc(基于标签的索引):df.loc['760563814450491392'] - 如果需要用整数位置定位,先找到目标行的位置再用
iloc:# 找到id为760563814450491392的行的位置 target_idx = df[df['id'] == 760563814450491392].index[0] df.iloc[target_idx]
2. 布尔筛选时返回了非布尔序列
当你用df[条件]筛选行时,条件必须返回一个由True/False组成的布尔序列。如果不小心写成了赋值语句,或者条件表达式返回了整数、字符串等其他类型,就会触发这个错误。
比如你想筛选favorite_count=1的推文,错误写法可能是:
# 错误:把比较运算符==写成了赋值=,返回的是整数1而非布尔序列 df[df['favorite_count'] = 1]
解决办法:
- 确保条件用比较运算符(
==/>/<等),返回布尔值:# 正确:筛选点赞数为1的推文 df[df['favorite_count'] == 1] - 处理嵌套的推特实体数据时,确保
apply返回布尔值:
比如你想筛选提到KxSweaters13的推文,要这样写:df[df['entities'].apply(lambda x: any( mention['screen_name'] == 'KxSweaters13' for mention in x['user_mentions'] ))]
3. 索引类型不匹配
如果你的DataFrame索引是字符串类型(比如id_str),但你用整数去访问;或者索引是整数,你用字符串去访问,都会导致类型错误。
比如你把id存成了字符串索引,却用整数去调用loc:
# 错误:索引是字符串类型的id_str,却传了整数 df.loc[760563814450491392]
解决办法:
- 匹配索引类型:如果索引是字符串,就传字符串值;如果是整数,就传整数:
df.loc['760563814450491392'] - 或者转换索引类型:
# 把id列转成整数,再设为索引 df['id'] = df['id'].astype(int) df.set_index('id', inplace=True) # 现在可以用整数正常访问 df.loc[760563814450491392]
先对照这几个场景排查一下,应该就能定位到问题啦!
内容的提问来源于stack exchange,提问作者Forrest
相关产品推荐
相关产品推荐

