我有一个Python语言的DataFrame,它有一个列,上面有名字(比如Joseph Haydn、Wolf港amdeus Mozart、Antonio Salieri等等)。
我想写一个新专栏,上面有海顿、莫扎特、萨列里等人的姓氏。
我知道如何拆分字符串,但我找不到将其应用于序列或数据框列的方法。
发布于 2015-09-07 00:02:25
如果您有:
import pandas
data = pandas.DataFrame({"composers": [
"Joseph Haydn",
"Wolfgang Amadeus Mozart",
"Antonio Salieri",
"Eumir Deodato"]})假设你只想要名字(而不是像艾玛迪斯这样的中间名):
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发布于 2020-05-11 15:46:55
试试这个来解决你的问题:
import pandas as pd
df = pd.DataFrame(
{'composers':
[
'Joseph Haydn',
'Wolfgang Amadeus Mozart',
'Antonio Salieri',
'Eumir Deodato',
]
}
)
df['lastname'] = df['composers'].str.split(n = 0, expand = False).str[1]您现在可以找到DataFrame,如下所示。
composers lastname
0 Joseph Haydn Haydn
1 Wolfgang Amadeus Mozart Amadeus Mozart
2 Antonio Salieri Salieri
3 Eumir Deodato Deodatohttps://stackoverflow.com/questions/32425334
复制相似问题