替换 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'])]
如果需要测试 NaN
s 或 None
s 使用 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
我从这里偷的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'])]
如果需要测试 NaN
s 或 None
s 使用 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