python - 用值跳过行时替换熊猫列中的子字符串:无
问题描述
我从这里偷了这个使用熊猫删除/替换基于另一列的列值
[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]
解决方案
利用:
[a.replace(b,'') if (a != None) and (b != None)
else a
for a,b in zip(df1['asker'], df1['party'])]
如果需要 testNaN
或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
推荐阅读
- python - 导入时将 Python 模块重新路由到另一个目录(子版本)
- c# - 使用 for 循环的直线折旧
- arraylist - 在 Zig 中更改数组列表中的值
- c# - 是否可以使用密码字符隐藏文本框的值?
- php - MySQL 参数 AES_ENCRYPT 查询,结果为 -1
- java - 在控制器中调用多个方法或覆盖服务中的一个方法中的所有调用?
- disk - 如何扩展 AFPS 容器的大小?
- json - 如何使用颤振在小部件中显示复杂的 JSON?
- python - 为什么 Python BeautifulSoup 对象是可调用的?定义在哪里?
- c - C 程序 - 从文件中读取整数并解码秘密消息