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

我想要一个带有姓氏的新专栏:海顿,莫扎特,萨列里等等。

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

最佳答案

如果你有:

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

假设您只需要名字(而不是像Amadeus这样的中间名):
data.composers.str.split('\s+').str[0]

会给:
0      Joseph
1    Wolfgang
2     Antonio
3       Eumir
dtype: object

您可以将其分配给同一数据框中的新列:
data['firstnames'] = data.composers.str.split('\s+').str[0]

姓氏为:
data.composers.str.split('\s+').str[-1]

这使:
0      Haydn
1     Mozart
2    Salieri
3    Deodato
dtype: object

(另请参阅Python Pandas: selecting element in array column,以访问“数组”列中的元素)

对于除姓氏以外的所有名称,您可以将" ".join(..)应用于每行中除姓氏之外的所有元素([:-1]):
data.composers.str.split('\s+').str[:-1].apply(lambda parts: " ".join(parts))

这使:
0              Joseph
1    Wolfgang Amadeus
2             Antonio
3               Eumir
dtype: object

关于python - 在Python DataFrame中拆分字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32425334/

10-12 21:56
查看更多