将原始值分割并映射到不同的pandas列

时间:2019-01-03 09:52:44

标签: python pandas

我想映射一个借助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的姓氏。

1 个答案:

答案 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))