根据 python 中的字符串值标记数据
Labeling data based on string value in python
我有一个包含 8000 行的数据框,其中 job_name
列包含带有短 "job header" 的字符串(见下文)。
我创建了不同的列表,其中包含我要分组的各个职位。
job_hilfskraft = ['bretreuungskraft', 'pflegehilfskraft', 'pflegehelfer', 'krankenpflegehelfer','altenpflegerhelfer', 'pflegeassistent','pflegeassistenz','pflegehilfskräfte', 'pflegeassistenten', 'altenpflegehilfskraft', 'pflegeassistentin','altenpflegehelfer']
job_fachkraft = ['pflegefachkraft', 'altenpfleger','pflegefachkräfte','altenpflegerin', 'pflegekraft', 'krankenpfleger', 'krankenpfleger', 'altenpflegerin', 'altenpflegefachkraft', 'pflegemitarbeiter']
job_leitung = ['pflegedienstleitung', 'pflegedienstleiter', 'wohnbereichsleiter', 'einrichtungsleiter']
job_sonstige = ['küchenhilfskraft', 'reinigungskraft', 'küchenleiter', 'servicekraft', 'spülkraft', 'empfangskraft']
包含职位的字符串示例。
job_name
0 Küchenhilfskraft in Teilzeit gesucht!
1 Examinierter Krankenpfleger in ambulanter Station
期望的输出:
job_name job_label
0 Küchenhilfskraft in Teilzeit gesucht! sonstige
1 Examinierter Krankenpfleger in ambulanter Station fachkraft
我用
df['job_label'] = ""
df['job_label'][df.job_name.str.contains('|'.join(job_hilfskraft))] = 'hilfskraft'
df['job_label'][df.job_name.str.contains('|'.join(job_leitung))] = 'leitung'
df['job_label'][df.job_name.str.contains('|'.join(job_sonstige))] = 'sonstige'
df['job_label'][df.job_name.str.contains('|'.join(job_fachkraft))] = 'fachkraft'
但它没有将标签分配给相应的行或只有少数...(<5% 的行)
我还收到每个 "contains" 行的消息:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
这应该可以解决您当前的问题。
df['job_label'] = ""
df.loc[df.job_name.str.contains('|'.join(job_hilfskraft)), 'job_label'] = 'hilfskraft'
df.loc[df.job_name.str.contains('|'.join(job_leitung)), 'job_label'] = 'leitung'
df.loc[df.job_name.str.contains('|'.join(job_sonstige)), 'job_label'] = 'sonstige'
df.loc[df.job_name.str.contains('|'.join(job_fachkraft)), 'job_label'] = 'fachkraft'
我可能会这样写:
lookup = {'hilfskraft': ['bretreuungskraft', 'pflegehilfskraft', 'pflegehelfer', 'krankenpflegehelfer','altenpflegerhelfer', 'pflegeassistent','pflegeassistenz','pflegehilfskräfte', 'pflegeassistenten', 'altenpflegehilfskraft', 'pflegeassistentin','altenpflegehelfer'],
'fachkraft': ['pflegefachkraft', 'altenpfleger','pflegefachkräfte','altenpflegerin', 'pflegekraft', 'krankenpfleger', 'krankenpfleger', 'altenpflegerin', 'altenpflegefachkraft', 'pflegemitarbeiter'],
'leitung': ['pflegedienstleitung', 'pflegedienstleiter', 'wohnbereichsleiter', 'einrichtungsleiter'],
'sonstige': ['küchenhilfskraft', 'reinigungskraft', 'küchenleiter', 'servicekraft', 'spülkraft', 'empfangskraft']}
df['job_label'] = ""
for replace, keywords in lookup.items():
for k in keywords:
df.loc[df.job_name.str.contains(k, case=False, regex=False), 'job_label'] = replace
我有一个包含 8000 行的数据框,其中 job_name
列包含带有短 "job header" 的字符串(见下文)。
我创建了不同的列表,其中包含我要分组的各个职位。
job_hilfskraft = ['bretreuungskraft', 'pflegehilfskraft', 'pflegehelfer', 'krankenpflegehelfer','altenpflegerhelfer', 'pflegeassistent','pflegeassistenz','pflegehilfskräfte', 'pflegeassistenten', 'altenpflegehilfskraft', 'pflegeassistentin','altenpflegehelfer']
job_fachkraft = ['pflegefachkraft', 'altenpfleger','pflegefachkräfte','altenpflegerin', 'pflegekraft', 'krankenpfleger', 'krankenpfleger', 'altenpflegerin', 'altenpflegefachkraft', 'pflegemitarbeiter']
job_leitung = ['pflegedienstleitung', 'pflegedienstleiter', 'wohnbereichsleiter', 'einrichtungsleiter']
job_sonstige = ['küchenhilfskraft', 'reinigungskraft', 'küchenleiter', 'servicekraft', 'spülkraft', 'empfangskraft']
包含职位的字符串示例。
job_name
0 Küchenhilfskraft in Teilzeit gesucht!
1 Examinierter Krankenpfleger in ambulanter Station
期望的输出:
job_name job_label
0 Küchenhilfskraft in Teilzeit gesucht! sonstige
1 Examinierter Krankenpfleger in ambulanter Station fachkraft
我用
df['job_label'] = ""
df['job_label'][df.job_name.str.contains('|'.join(job_hilfskraft))] = 'hilfskraft'
df['job_label'][df.job_name.str.contains('|'.join(job_leitung))] = 'leitung'
df['job_label'][df.job_name.str.contains('|'.join(job_sonstige))] = 'sonstige'
df['job_label'][df.job_name.str.contains('|'.join(job_fachkraft))] = 'fachkraft'
但它没有将标签分配给相应的行或只有少数...(<5% 的行)
我还收到每个 "contains" 行的消息:
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
这应该可以解决您当前的问题。
df['job_label'] = ""
df.loc[df.job_name.str.contains('|'.join(job_hilfskraft)), 'job_label'] = 'hilfskraft'
df.loc[df.job_name.str.contains('|'.join(job_leitung)), 'job_label'] = 'leitung'
df.loc[df.job_name.str.contains('|'.join(job_sonstige)), 'job_label'] = 'sonstige'
df.loc[df.job_name.str.contains('|'.join(job_fachkraft)), 'job_label'] = 'fachkraft'
我可能会这样写:
lookup = {'hilfskraft': ['bretreuungskraft', 'pflegehilfskraft', 'pflegehelfer', 'krankenpflegehelfer','altenpflegerhelfer', 'pflegeassistent','pflegeassistenz','pflegehilfskräfte', 'pflegeassistenten', 'altenpflegehilfskraft', 'pflegeassistentin','altenpflegehelfer'],
'fachkraft': ['pflegefachkraft', 'altenpfleger','pflegefachkräfte','altenpflegerin', 'pflegekraft', 'krankenpfleger', 'krankenpfleger', 'altenpflegerin', 'altenpflegefachkraft', 'pflegemitarbeiter'],
'leitung': ['pflegedienstleitung', 'pflegedienstleiter', 'wohnbereichsleiter', 'einrichtungsleiter'],
'sonstige': ['küchenhilfskraft', 'reinigungskraft', 'küchenleiter', 'servicekraft', 'spülkraft', 'empfangskraft']}
df['job_label'] = ""
for replace, keywords in lookup.items():
for k in keywords:
df.loc[df.job_name.str.contains(k, case=False, regex=False), 'job_label'] = replace