替换 pandas 列中的子字符串,同时跳过具有以下值的行:None

replace substrings in pandas columns while skipping rows with value: None

我从这里偷的Remove/replace columns values based on another columns using pandas

[a.replace(b,'') for a,b in zip(df1['asker'], df1['party']) if a != None]

我添加了 if a != None 因为它总是抛出错误:AttributeError: 'NoneType' object has no attribute 'replace'

以下是同一问题的不同解决方案:替换 col asker

中的子字符串 df1['party']
df1['new_column'] = df1['asker'].replace(to_replace=r'\b'+df1['party']+r'\b', value='',regex=True)

df1['asker'] = df1.apply(lambda x: x['asker'].replace(x['party'], ''), axis = 1)

None 在我为 None

添加例外后立即工作

df1 列的示例 party

[QQQ,
None,
RRR-Fraktion]

df1 列的示例 asker

[Konrad Munch QQQ,
None,
Heiko Baer RRR-Fraktion]

使用:

[a.replace(b,'') if (a != None) and (b != None) 
                 else a
                 for a,b in zip(df1['asker'], df1['party'])]

如果需要测试 NaNs 或 Nones 使用 notna:

df1 = pd.DataFrame({"asker": ["Heiko Baer RRR-Fraktion", "a", "b", 
                               np.nan, None, None, np.nan], 
                    "party": ['RRR-Fraktion', None, np.nan, 'a', 's', None, np.nan]})
    
df1['asker'] = [a.replace(b,'') if pd.notna(a) and pd.notna(b) 
                                else a 
                                for a,b in zip(df1['asker'], df1['party'])]
print (df1)
         asker         party
0  Heiko Baer   RRR-Fraktion
1            a          None
2            b           NaN
3          NaN             a
4         None             s
5         None          None
6          NaN           NaN