首页 > 解决方案 > 用值跳过行时替换熊猫列中的子字符串:无

问题描述

我从这里偷了这个使用熊猫删除/替换基于另一列的列值

[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'

以下是同一问题的不同解决方案:df1['party']在 col 中替换子字符串asker

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值的例外,它们都没有工作

df1列示例party

[QQQ,
None,
RRR-Fraktion]

df1列示例asker

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

标签: pythonpandaslist-comprehensionnonetype

解决方案


利用:

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

如果需要 testNaNNones 使用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

推荐阅读