数据框覆盖整列

时间:2019-06-28 10:12:54

标签: python excel pandas

使用熊猫更新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的brand3列下看到brand_name的数据,而在brand_name列中却看不到brand1brand2的任何地方。但是,我发现Excel工作表的brand2列中存在brand3item的子字符串。

请帮助我,为什么不是所有品牌都列在列中,为什么只有最后一个。

关于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   

1 个答案:

答案 0 :(得分:0)

您正在将brand3的if / else块的结果写在brand1和brand2的结果上。尝试遵循您编写的循环:

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

在if / else语句的成功部分之后添加中断应该足够了:

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