首页 > 解决方案 > 如何以最佳方式替换数据框

问题描述

我有一个数据框中的单词列表,我想用空字符串替换它。我有一个名为 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”我希望代码替换与模式完全匹配的数据。请帮忙!

标签: pythonpandasdatabasedataframenumpy

解决方案


这将是一种方式。更换顺序必须小心。如果 '.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

推荐阅读