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
我正在尝试做的事情: 通过正则表达式搜索传递一列,以便 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