【问题标题】:Extracting string with the help of function借助函数提取字符串
【发布时间】:2019-10-26 10:41:06
【问题描述】:

实际上,我有大约 400 万行的点击流数据帧。我有很多列,其中两个基于 URL 和域。我有一本字典,想用它作为条件。例如:如果域等于 amazon.de 并且 Url 包含关键字 pillow,则该列将具有值 pillow。等等。

dictionary_keywords = {"amazon.de": "pillow", "rewe.com": "apple"}

ID   Domain                  URL
1    amazon.de               www.amazon.de/ssssssss/exapmle/pillow
2    rewe.de                 www.rewe.de/apple

预期的输出应该是新列:

ID   Domain                  URL                                    New_Col
1    amazon.de               www.amazon.de/ssssssss/exapmle/pillow  pillow
2    rewe.de                 www.rewe.de/apple                       apple

我可以手动使用 .str.contain 方法,但需要定义一个以字典键和值作为条件的函数。

类似df[df['domain] == 'amazon.de'] & df[df['url'].str.contains('pillow')

但我不确定。我是新手。

【问题讨论】:

  • 学会使用正则表达式(RegEx),生活会更轻松
  • 到目前为止你自己尝试过什么?
  • @jorijnsmit 我刚刚编辑了这个问题,并添加了到目前为止我想要做的事情......但我是新手,并不真正了解如何将字典用作条件。
  • 输入输出不匹配。您在字典中有"rewe.com": "apple",但在DataFrame 中有"rewe.de""Apple"(大写A)。
  • @alec_djinn 感谢您指出...我改了。

标签: python pandas function lambda


【解决方案1】:

我更喜欢解决这类问题的方法是使用df.apply() by row (axis=1) 和自定义函数来处理逻辑。

import pandas as pd

dictionary_keywords = {"amazon.de": "Pillow", "rewe.de": "Apple"}
df = pd.DataFrame({
    'Domain':['amazon.de','rewe.de'],
    'URL':['www.amazon.de/ssssssss/exapmle/pillow', 'www.rewe.de/apple']
})

def f(row):
    global dictionary_keywords
    try:
        url = row['URL'].lower()
        domain = url.split('/')[0].strip('www.')
        if dictionary_keywords[domain].lower() in url:
            return dictionary_keywords[domain]
    except Exception as e:
        print(row.name, e)
    return None #or False, or np.nan

df['New_Col'] = df.apply(f, axis=1)

输出:

print(df)

      Domain                                    URL New_Col
0  amazon.de  www.amazon.de/ssssssss/exapmle/pillow  Pillow
1    rewe.de                      www.rewe.de/apple   Apple

【讨论】:

  • 这似乎很有希望,这可能是迄今为止最好的解决方案,但我想如果有大约数百万行可能需要更长的时间......或者?
  • @MuhammadSalmanShahid 比什么长? df.apply 很快。 pandas.pydata.org/pandas-docs/stable/reference/api/…
  • 只是对功能感到好奇,但它是最好的解决方案。谢谢你:)
  • 您可以通过剥离该功能使其更快。如果你有一个用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多