如何在没有模式确定停止参数的情况下使用slice()获取子字符串

2024-06-25 23:42:23 发布

您现在位置:Python中文网/ 问答频道 /正文

从本系列中:

Full_Name :

Braund, Mr. Owen Harris   
Cumings, Mrs. John Bradley (Florence Briggs Th...   
Heikkinen, Miss. Laina    
Futrelle, Mrs. Jacques Heath (Lily May Peel)    
Allen, Mr. William Henry 

如何获取此系列:

Last_Name :

Braund 
Cumings   
Heikkinen    
Futrelle    
Allen 

我认为这段代码可能有用,但它没有,它返回一个NaN列:

last_name = df['Name'].str.slice(start=0,stop= col.str.find(',')) 

Tags: namejohnfullmrmrsstrharrisbradley
3条回答

用逗号分隔名称,并取每个分隔的第一部分:

last_name = df['name'].str.split(',').str[0]
#0       Braund
#1      Cumings
#2    Heikkinen
#3     Futrelle
#4        Allen

使用extract

df.Name.str.extract(r'^(.+?),',expand=True)
Out[149]: 
           0
0     Braund
1    Cumings
2  Heikkinen
3   Futrelle
4      Allen

我建议使用列表理解,因为StringMethods通常非常慢

%timeit df.Name.str.split(', ').str[0]
1.09 ms ± 142 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit [k.split(', ')[0] for k in df.Name.tolist()]
178 µs ± 2.49 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit pd.Series([k.split(', ')[0] for k in df.Name.tolist()])
285 µs ± 618 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)

设置:

z = io.StringIO("""Name
Braund, Mr. Owen Harris   
Cumings, Mrs. John Bradley (Florence Briggs Th...   
Heikkinen, Miss. Laina    
Futrelle, Mrs. Jacques Heath (Lily May Peel)    
Allen, Mr. William Henry """)

df = pd.read_table(z)
df = pd.concat([df]*100).reset_index(drop=True)

相关问题 更多 >