在Python DataFrame中拆分字符串

Ren*_*col 6 python string dataframe pandas

我在Python中有一个带有名字的列的DataFrame(例如Joseph Haydn,Wolfgang Amadeus Mozart,Antonio Salieri等等).

我想得到一个名字的新专栏:海顿,莫扎特,萨列里等等.

我知道如何拆分字符串,但我找不到将其应用于系列或数据框列的方法.

And*_*ner 16

如果你有:

import pandas
data = pandas.DataFrame({"composers": [ 
    "Joseph Haydn", 
    "Wolfgang Amadeus Mozart", 
    "Antonio Salieri",
    "Eumir Deodato"]})
Run Code Online (Sandbox Code Playgroud)

假设您只想要名字(而不是像Amadeus这样的中间名):

data.composers.str.split('\s+').str[0]
Run Code Online (Sandbox Code Playgroud)

会给:

0      Joseph
1    Wolfgang
2     Antonio
3       Eumir
dtype: object
Run Code Online (Sandbox Code Playgroud)

您可以将其分配给同一数据框中的新列:

data['firstnames'] = data.composers.str.split('\s+').str[0]
Run Code Online (Sandbox Code Playgroud)

姓氏将是:

data.composers.str.split('\s+').str[-1]
Run Code Online (Sandbox Code Playgroud)

这使:

0      Haydn
1     Mozart
2    Salieri
3    Deodato
dtype: object
Run Code Online (Sandbox Code Playgroud)

(另请参阅Python Pandas:在数组列中选择元素中的元素以访问"数组"列中的元素)

对于除姓氏之外的所有名称,您可以应用于" ".join(..)[:-1]每行的最后一个元素()之外的所有元素:

data.composers.str.split('\s+').str[:-1].apply(lambda parts: " ".join(parts))
Run Code Online (Sandbox Code Playgroud)

这使:

0              Joseph
1    Wolfgang Amadeus
2             Antonio
3               Eumir
dtype: object
Run Code Online (Sandbox Code Playgroud)