Pandas df.apply 函数 returns None

Pandas df.apply function returns None

我正在尝试做的事情: 通过正则表达式搜索传递一列,以便 return 将其添加到另一列

如何: 通过使用简单的 if-else 子句编写函数:

def category(series):
    pattern = 'microsoft|office|m365|o365'
    if re.search (series,pattern,re.IGNORECASE) != None:
        return 'Microsoft 365'
    else:
        return 'Not Microsoft 365'

df['Category'] = df['name'].apply(category)

预期输出: 值设置为 Microsoft 365 或非 Microsoft 365 的系列

实际输出: 具有 None 个值

的系列

我目前是如何解决的:

df[df['name'].str.contains(pattern,case = False), 'Category'] = 'Microsoft 365'

数据集片段:

name Category
Microsoft None
M365 None

我想了解为什么应用功能不起作用。任何见解将不胜感激。我是 Pandas 的新手,所以不是 100% 出了什么问题。

谢谢!

我觉得你调用apply的时候有个小错误。应该是这样的。

df['Category'] = df['name'].apply(category)

apply 方法的参数应该是您需要应用于系列中每个元素的函数。

这应该有效:

import pandas as pd
import re

df = pd.DataFrame({
    'name': ['Microsoft Exchange Pro', 'Microsoft', 'microsoft', 'office', 'Office', 'M365', 'm365', 'other'], 
    'Category':[None, None, None, None, None, None, None, None]
})

def category(series):
    pattern = 'microsoft|office|m365|o365'
    if re.search (pattern, series, re.IGNORECASE) != None:
        return 'Microsoft 365'
    else:
        return 'Not Microsoft 365'

df['Category'] = df['name'].apply(category)

print(df)

结果:

                     name           Category
0  Microsoft Exchange Pro      Microsoft 365
1               Microsoft      Microsoft 365
2               microsoft      Microsoft 365
3                  office      Microsoft 365
4                  Office      Microsoft 365
5                    M365      Microsoft 365
6                    m365      Microsoft 365
7                   other  Not Microsoft 365