我有一个熊猫系列:
names = pd.Series([
'Andre Agassi',
'Barry Bonds',
'Christopher Columbus',
'Daniel Defoe',
'Emilio Estevez',
'Fred Flintstone',
'Greta Garbo',
'Humbert Humbert',
'Ivan Ilych'])
看起来像这样:
0 Andre Agassi
1 Barry Bonds
2 Christopher Columbus
3 Daniel Defoe
4 Emilio Estevez
5 Fred Flintstone
6 Greta Garbo
7 Humbert Humbert
8 Ivan Ilych
我希望这样做:
0 Agassi, Andre
1 Bonds, Barry
2 Columbus, Christopher
3 Defoe, Daniel
4 Estevez, Emilio
5 Flintstone, Fred
6 Garbo, Greta
7 Humbert, Humbert
8 Ilych, Ivan
有人建议像这样的代码,但它没有工作......
names.apply(split)[1]+', ' + names.apply(split)[0]
我检查了以下主题,但它们似乎也不是我想要的:
答案 0 :(得分:4)
是否使用str.replace
?
In [451]: names.str.split().apply(lambda x: ', '.join(x[::-1]))
Out[451]:
0 Agassi, Andre
1 Bonds, Barry
2 Columbus, Christopher
3 Defoe, Daniel
4 Estevez, Emilio
5 Flintstone, Fred
6 Garbo, Greta
7 Humbert, Humbert
8 Ilych, Ivan
dtype: object
In [452]: names.apply(lambda x: ', '.join(x.split()[::-1]))
Out[452]:
0 Agassi, Andre
1 Bonds, Barry
2 Columbus, Christopher
3 Defoe, Daniel
4 Estevez, Emilio
5 Flintstone, Fred
6 Garbo, Greta
7 Humbert, Humbert
8 Ilych, Ivan
dtype: object
答案 1 :(得分:1)
Vectorized Numpy解决方案:
In [276]: arr = names.str.split(expand=True).values[:, ::-1]
In [277]: names.values[:] = np.sum(np.insert(arr, 1, ', ', axis=1), axis=1)
In [278]: names
Out[278]:
0 Agassi, Andre
1 Bonds, Barry
2 Columbus, Christopher
3 Defoe, Daniel
4 Estevez, Emilio
5 Flintstone, Fred
6 Garbo, Greta
7 Humbert, Humbert
8 Ilych, Ivan
dtype: object
答案 2 :(得分:0)
使用.map结合下面的字符串方法:
names.map(lambda s: s.split()[1] + ', ' + s.split()[0])
答案 3 :(得分:0)
首先,使用.split方法定义一个反转名称的函数。它需要将参数分割到的位置,在本例中为" "并返回输入字符串的两个部分的列表。从那里我们可以重新组织我们函数的返回字符串我们喜欢的方式 - 在这种情况下是姓氏,名字。
其次,reverse_names函数接受Pandas系列,将函数reverse_name应用于系列中的每个元素(使用.apply方法),然后返回另一个Pandas系列。
def reverse_name(name):
split_name = name.split(" ")
first_name = split_name[0]
last_name = split_name[1]
return last_name + ", " + first_name
def reverse_names(names):
return names.apply(reverse_name)
print reverse_names(names)
您的输出应该是这样的:
0 Agassi, Andre
1 Bonds, Barry
2 Columbus, Christopher
3 Defoe, Daniel
4 Estevez, Emilio
5 Flintstone, Fred
6 Garbo, Greta
7 Humbert, Humbert
8 Ilych, Ivan
9 Joyce, James
10 Knightley, Keira
11 Lane, Lois
12 Myers, Mike
13 Nolte, Nick
14 Osbourne, Ozzy
15 Picasso, Pablo
16 Quirrell, Quirinus
17 Ray, Rachael
18 Sarandon, Susan
19 Turner, Tina
20 Urbina, Ugueth
21 Vaughn, Vince
22 Wilson, Woodrow
23 Yamada, Yoji
24 Zidane, Zinedine
dtype: object