数据帧覆盖整个列

2024-10-16 22:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,而更新excel表使用熊猫

我在excel工作表中有一个名为'item'的列,以及python中一些字符串的列表。 我遍历每个列表项以检查列表字符串是否存在于excel工作表的item列中,如果存在,我将更新brand_name下同一行中的字符串

这是我的密码

for index_label, row_series in new_df.iterrows():
    for brnd in  ['brand1','brand2','brand3']:
        try:

            if brnd in  row_series['item']:
                new_df.at[index_label,'brand_name'] = brnd

            else:
                new_df.at[index_label,'brand_name'] = ''
        except:

现在的问题不是所有品牌的更新。我只能在excel的brand_name列下看到brand3的数据,在brand\u name列中看不到brand1brand2的任何地方。但是,我看到在excel工作表的item列中存在brand2brand3的子字符串

请帮我解释一下为什么不是所有的品牌都出现在专栏里为什么只有最后一个

关于Excel工作表的事

item   , brand_name 

some_brand1_two_like_thi     
some_brand2_two_like_thi     
some_like_this_brand1
brand3 two_like_thi     
brand3 two like thi   

Tags: 字符串namein列表indexitemexcellabel
1条回答
网友
1楼 · 发布于 2024-10-16 22:28:21

您正在将brand3的if/else块的结果写在brand1和brand2的结果之上。试着按照你写的循环:

  • 它使用“brand1”并检查“brand1”是否存在。如果找到它,它会在新的df中写“brand1”
  • 转到循环的下一步,“brand2”将不在那里,它将在相同的位置写入空字符串,删除“brand1”。“brand3”也是一样,所以它是你唯一能找到的

在if/else语句的成功部分之后添加break就足够了:

if brnd in  row_series['item']:
   new_df.at[index_label,'brand_name'] = brnd
   break

相关问题 更多 >