我想映射一个借助python中的nameparser
包来拆分名称的函数。
我使用的功能如下:
def extract_parts(name):
first, middle, last = (HumanName(name)).first,(HumanName(name)).middle, (HumanName(name)).last
return first, middle, last
例如,数据框如下所示,其中NAMES
列包含需要用nameparser
包拆分的名称。
ID | NAMES | column
1 | Ben Jerry | I
2 | John Jack Joe | I
3 | Dr. Amelia von Lugenwitz | I
4 | Cristian Maria de Angel | I
5 | The CBA Company | C
6 | FBPTQ | C
然后,我循环执行该函数并尝试对其进行映射,但它仅返回最后一个值。我想这很有道理。但是.apply()
无效,或者我不知道如何正确应用它。
for index in range(len(file)):
if file["column"][index] == "A":
try:
file["COLUMN1"], file["COLUMN2"], file["COLUMN3"] = extract_parts(file["ORIGINAL"][index])
except TypeError as e:
print(e)
它应该返回一个数据帧:
ID | COLUMN1 | COLUMN2 | COLUMN3
1 | Ben | | Jerry
2 | John | Jack | Joe
3 | Amelia | | von Lugenwitz
4 | Cristian| Maria | de Angel
其中COLUMN1
代表由名称解析器HumanName()提取的名字,COLUMN2
的中间名和COLUMN3
的姓氏。
答案 0 :(得分:1)
假设您的数据框有一个names
列,例如:
names
0 Ben Jerry
1 John Jack Joe
2 Dr. Amelia von Lugenwitz
3 Cristian Maria de Angel
您可以使用zip将值拆成多列:
df['first'], df['middle'], df['last'] = zip(*df['names'].apply(extract_parts))