python - 如何以最佳方式替换数据框
问题描述
我有一个数据框中的单词列表,我想用空字符串替换它。我有一个名为 source 的列,我必须正确清理它。例如,将“siliconvalley.co”替换为“siliconvalley”
我创建了一个列表
list = ['.com','.co','.de','.co.jp','.co.uk','.lk','.it','.es','.ua','.bg','.at','.kr']
并用空字符串替换它们
for l in list:
df['source'] = df['source'].str.replace(l,'')
在输出中,我得到“silinvalley”,这意味着它也替换了“co”而不是“.co”我希望代码替换与模式完全匹配的数据。请帮忙!
解决方案
这将是一种方式。更换顺序必须小心。如果 '.co' 出现在 '.co.uk' 之前,您不会得到想要的结果。
df["source"].replace('|'.join([re.escape(i) for i in list_]), '', regex=True)
最小的例子:
import pandas as pd
import re
list_ = ['.com','.co.uk','.co','.de','.co.jp','.lk','.it','.es','.ua','.bg','.at','.kr']
df = pd.DataFrame({
'source': ['google.com', 'google.no', 'google.co.uk']
})
pattern = '|'.join([re.escape(i) for i in list_])
df["new_source"] = df["source"].replace(pattern, '', regex=True)
print(df)
# source new_source
#0 google.com google
#1 google.no google.no
#2 google.co.uk google
推荐阅读
- php - cygwin php找不到扩展
- java - Handler.post 无法解析为类型
- c# - Unity 程序崩溃?
- stanford-nlp - 在编码器-解码器结构中,如果我使用 BERT 嵌入输入源,我是否也应该使用 BERT 到编码器目标以馈送到解码器?
- javascript - Observable 作为静态类成员是一个好习惯吗?
- reactjs - 反应导航依赖问题
- python - 如果熊猫满足条件,则更新列
- mysql - 使用触发器级联删除--错误代码:1442。无法更新存储函数/触发器中的表,因为
- python - 如何从 python 中的 json 中提取 8 位数字?
- php - 如何根据WordPress中的层次结构检索自定义分类的父术语的所有子术语?