pandas 如何创建具有值列表的行的子集

3phpmpom  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(145)

当我尝试创建df行的子集时,我使用以下代码

lst_of_brands =['brand_1','brand_2','Brand_3']

df_selected_brands = df_all_products.loc[df_all_products['brands'].isin(lst_of_brands)]

当我在新df中的列上迭代时,它在键nr10处停止

for item in range(len(df_selected_brands)):
    product_id = df_selected_brands['id'][item]
    print (product_id)

此代码在键编号10处停止并给出错误

KeyError:10

在原始df中迭代相同的列是没有问题的。
我想我做子集的方式有问题,但不知道是什么。

s71maibg

s71maibg1#

在循环之前重置df_selected_brands的索引:

df_selected_brands.reset_index(drop=True, inplace=True)

for item in range(len(df_selected_brands)):
    product_id = df_selected_brands['id'][item]
    print (product_id)

当子集化一个 Dataframe 时,索引保留其原始值。因此当你使用索引迭代一个 Dataframe 或序列时,它们不能按预期对齐,并引发一个键错误。

64jmpszr

64jmpszr2#

如果您确实想按位置迭代每行,请使用.iloc

for item in range(len(df_selected_brands)):
    product_id = df_selected_brands['id'].iloc[item]  # <- HERE
    print (product_id)

但你也可以使用itertuples

for item in df_selected_brands.itertuples():
    product_id = item.Id
    print(product_id)

相关问题