搜索Pandas中文本的不同变体

46scxncf  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(261)

我有一个由人员及其学位类型组成的数据框架:

data = {'Name': ['Alice','Bob','Chris','David'],
    'Degree': ['phd','BA','MBA','B.Sc.']
    }

df = pd.DataFrame(data, columns = ['Name', 'Degree'])

我想根据学位类型进行一次热编码:

data = {'Name': ['Alice','Bob','Chris','David'],
      'is_bachelors': [0,1,0,1],
      'is_masters': [0,0,1,0],
      'is_phd': [1,0,0,0]
     }

问题是,人们以许多不同的方式输入他们的学位类型。例如,对于博士,你可以有博士,博士,博士,博士,博士等等。基本上间隔和周期有很多变化。
此外,我不希望mba被标记为单身汉(因为它包含学士学位)。我发现这发生在Pandas街。
如有任何建议,将不胜感激。

os8fio9y

os8fio9y1#

由于相同的度类型都以相同的字符开头,因此可以降低它们并Map到第一个字符:

data = {'Name': ['Alice','Bob','Chris','David'],
    'Degree': ['phd','BA','MBA','B.Sc.']
    }

df = pd.DataFrame(data, columns = ['Name', 'Degree'])
df['Degree'] = df['Degree'].str.lower().str[:1].map({'b': 'is_bachelors', 'm': 'is_masters', 'p': 'is_phd'})
df.pivot_table(index='Name', columns='Degree', aggfunc=len, fill_value=0)

结果:
姓名(学士学位)硕士学位(PHDALICE001BOB100CHRIS0100DAVID100)

o8x7eapl

o8x7eapl2#

对于您提供的“phd”示例,您可以删除标点符号并使所有内容都小写,以捕获所有phd:

def preprocess (degree):
    return degree.replace('.', "").lower()

data['Degree'] = data.Degree.apply(preprocess)

也许,这也适用于其他程度的大多数变化,但我无法在不了解其他变化的情况下对其进行评估。

0yg35tkg

0yg35tkg3#

您可以使用以下选项:

import re

string= 'MBA'

if re.search('p', string, re.IGNORECASE):
    print(0)
elif re.search('m', string, re.IGNORECASE):
    print(1)
elif re.search('ba', string, re.IGNORECASE):
    print(2)
elif re.search('bs', string, re.IGNORECASE):
    print(2)

它解决了区分大小写、空格和标点符号的问题。同样在“mba”等包含“m”和“ba”的情况下,因为任何包含“m”的字符串都会在“ba”检查之前被捕获。

相关问题