Skip to main content
 首页 » 编程设计

python之如何使用 pandas 中的正则表达式屏蔽具有某些 nan 值的列

2024年08月20日38lyj

我有一个数据框,其中有一列访问过的行政区(在许多其他列中):

Index  User     Boroughs_visited 
0      Eminem   Manhattan, Bronx 
1      BrSpears NaN 
2      Elvis    Brooklyn 
3      Adele    Queens, Brooklyn 

我想创建第三列来显示哪个用户访问了布鲁克林,所以我用 python 编写了可能最慢的代码:

df['Brooklyn']= 0 
def borough(): 
    for index,x in enumerate(df['Boroughs_visited']): 
        if pd.isnull(x): 
            continue 
        elif re.search(r'\bBrooklyn\b',x): 
            df_vols['Brooklyn'][index]= 1 
 
borough() 

导致:

Index  User     Boroughs_visited  Brooklyn 
0      Eminem   Manhattan, Bronx   0 
1      BrSpears NaN                0 
2      Elvis    Brooklyn           1 
3      Adele    Queens, Brooklyn   1 

我的计算机运行 2000 行需要 15 秒。有更快的方法吗?

请您参考如下方法:

让 .str 访问器与 contains 和 fillna 一起使用:

df['Brooklyn'] = (df.Boroughs_visited.str.contains('Brooklyn') * 1).fillna(0) 

或同一语句的另一种格式:

df['Brooklyn'] = df.Boroughs_visited.str.contains('Brooklyn').mul(1, fill_value=0) 

输出:

   Index          User  Boroughs_visited  Brooklyn 
0      0        Eminem  Manhattan, Bronx         0 
1      1  BrSpears NaN              None         0 
2      2         Elvis          Brooklyn         1 
3      3         Adele  Queens, Brooklyn         1