使用Pandas iterrows遍历DataFrame筛选True行时遇类型错误的解决
问题解决:DataFrame逐行迭代筛选行时的TypeError
错误原因
df.iterrows()返回的是**(行索引, 行数据)**的元组,你直接用row['Ans']是在操作元组,自然会触发tuple indices must be integers or slices, not str的错误。
修正后的逐行迭代代码
把循环里的变量拆成索引和行数据两个部分,再判断行数据的Ans值:
import pandas as pd df = pd.DataFrame({ 'Code': ['t1', 't2','t3'], 'Ans': [True, False, True], 'Val': [140, 145,140], }) Trues = [] # 拆包索引和行数据 for idx, row in df.iterrows(): if row['Ans'] == True: Trues.append(row) print(Trues)
运行后会得到包含符合条件的Series对象的列表。
更高效的非迭代方法
如果不需要强制逐行迭代,pandas的布尔索引是更高效的方式,直接筛选出符合条件的行:
# 筛选出Ans为True的行,得到新的DataFrame true_rows_df = df[df['Ans'] == True] # 如果需要转成字典列表形式 true_rows_list = true_rows_df.to_dict('records') # 或者转成无索引的元组列表 true_rows_list = list(true_rows_df.itertuples(index=False, name=None))
内容的提问来源于stack exchange,提问作者tonydanza123
相关产品推荐
相关产品推荐

