【问题标题】:How can I optimally replace the dataframe如何以最佳方式替换数据框
【发布时间】:2021-07-15 11:14:17
【问题描述】:

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

【问题讨论】:

  • Series.str.replace() 默认将替换字符串作为正则表达式处理,因此点表示“任何字符”。你要么需要传递regex=False,要么用反斜杠转义点,例如'\.com'而不是'.com',那么它们将只匹配文字点。
  • 能否请您给我们一些您的数据框以及您的输出?
  • 顺便说一句,使用像list 这样的内置名称作为变量名是不好的做法,最好使用像domains = ['\.com', ...] 这样的名称。
  • 您只想从字符串中删除域 TLD 吗?

标签: python pandas database dataframe numpy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2017-09-19
    • 2020-10-08
    • 1970-01-01
    • 2015-03-19
    • 2020-11-08
    • 2012-09-14
    • 2014-11-02
    • 2017-08-23
    相关资源
    最近更新 更多