Python遍历一个列表,从dataframe中的列中查找另一个字符串中的子字符串匹配,然后在新列中返回匹配的子字符串

2024-04-27 03:33:11 发布

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

我在MacOSSierra10.12.6上的Spyder3.2.3上用Python3.6编程。在

我在数据框df中有一列,其中包含澳大利亚城镇的列表和其他信息。感兴趣的列是suburbs

df["suburbs"]

Apollo Bay (Tas.)
Apollo Bay (Vic.)
Apoinga
ACT Remainder - Belconni

我还有一份名单states,其中包括澳大利亚的州。在

^{pr2}$

我的目标是查看来自df["suburbs"]的郊区是否包含列表states中的任何状态,如果是,那么它将返回df["state"]列中的状态。在

所以,目前我的解决方案是使用for loop和if语句,但是出于某种原因,我的for loop和if语句即使匹配也会返回not found。我当前的for循环和if语句如下:

for suburb in df["suburbs"].str.upper():
    for state in states:
        if state in suburb:
            df["state"] = state
        else:
            df["state"] = "not found"

这个又回来了

not found
not found
not found
not found

我注意到的另一件事是在Spyder的variable explorer部分,上面的代码分别创建了两个变量suburb和{},它们的值分别是ACT Remainder - Belconni和{}。它似乎从dataframe列和列表中选择最后一个值。在

但是,如果我不创建一个新的列state,而只使用print函数来查看子字符串是否匹配,则表明它确实有效。代码如下:

for suburb in test["suburbs"].str.upper():
    for state in states:
        if state in suburb:
            print(suburb, state)

结果是:

APOLLO BAY (TAS.) TAS
APOLLO BAY (VIC.) VIC
ACT REMAINDER - BELCONNI ACT

它跳过不匹配的那个。但是只要我添加一个额外的else语句来打印not found,结果将是全部not found。有谁能帮我弄清楚这里出了什么问题,为什么?这相当令人沮丧,因为在我看来这是一个简单的任务。在

非常感谢你。在


Tags: indf列表forifnot语句act