gpt4 book ai didi

python - 使用 str.contains 时如何忽略带有掩码的行?

转载 作者:行者123 更新时间:2023-12-01 06:33:19 26 4
gpt4 key购买 nike

我有一个商店名称的数据框,我必须对其进行标准化。例如麦当劳 1234 LA -> 麦当劳。您可以在下面看到 PopeyesWallmart 已经标准化:

   id              store  standard
0 1 McDonalds NaN
1 2 Lidl NaN
2 3 Lidl New York 123 NaN
3 4 KFC NaN
4 5 Slidling Shop NaN
5 6 Lidi Berlin NaN
6 7 Popeyes NY Popeyes
7 8 Wallmart LA 90210 Wallmart
8 9 Aldi NaN
9 10 London Lidl NaN

我使用 str.contains 查找商店名称,并将标准化名称放入 standard 列中。在这里,我对 Lidl 商店进行标准化:

df.loc[df.store.str.contains(r'\blidl\b', case=False), 'standard'] = 'Lidl'

print(df)

id store standard
0 1 McDonalds NaN
1 2 Lidl Lidl
2 3 Lidl New York 123 Lidl
3 4 KFC NaN
4 5 Slidling Shop NaN
5 6 Lidi Berlin NaN
6 7 Popeyes NY Popeyes
7 8 Wallmart LA 90210 Wallmart
8 9 Aldi NaN
9 10 London Lidl Lidl

然而,这里的问题是它在已经标准化的行上搜索 str.contains(Popeyes 和 Wallmart)。

如何仅在 df['standard'] == NaN 的行上运行 str.contains 并忽略标准化行?

我尝试了一些非常非常困惑的方法,但似乎不起作用。我设置了一个掩码,然后在运行 str.contains 之前使用它:

mask = df['standard'].isna()

df[mask].loc[df[mask].store.str.contains(aldi_regex,na=False), 'standard3'] = 'Aldi'

不起作用。我还尝试过一些更困惑的方法,但没有成功:

df.loc[mask].loc[df.loc[mask].store.str.contains(aldi_regex,na=False), 'standard3'] = 'Aldi'

如何忽略标准化行?无需诉诸 for 循环。

我的示例数据框:

import pandas as pd
import re

df = pd.DataFrame({'id': pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10],dtype='int64',index=pd.RangeIndex(start=0, stop=10, step=1)), 'store': pd.Series(['McDonalds', 'Lidl', 'Lidl New York 123', 'KFC', 'Slidling Shop', 'Lidi Berlin', 'Popeyes NY', 'Wallmart LA 90210', 'Aldi', 'London Lidl'],dtype='object',index=pd.RangeIndex(start=0, stop=10, step=1)), 'standard': pd.Series([pd.np.nan, pd.np.nan, pd.np.nan, pd.np.nan, pd.np.nan, pd.np.nan, 'Popeyes', 'Wallmart', pd.np.nan, pd.np.nan],dtype='object',index=pd.RangeIndex(start=0, stop=10, step=1))}, index=pd.RangeIndex(start=0, stop=10, step=1))

最佳答案

How can I ignore the standardized rows? Without resorting to a for loop.

通过过滤检查空值:

df.loc[df['standard'].isnull() & df.store.str.contains(r'\blidl\b', case=False), 'standard'] = 'Lidl'

关于python - 使用 str.contains 时如何忽略带有掩码的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59790807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com