Как получить ряд подстрок панд, используя slice (), пока нет шаблона для определения аргумента stop - PullRequest
0 голосов
/ 16 сентября 2018

Из этой серии панд:

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(',')) 

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Я бы предложил использовать понимание списка, потому что 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)
0 голосов
/ 16 сентября 2018

Использование extract

df.Name.str.extract(r'^(.+?),',expand=True)
Out[149]: 
           0
0     Braund
1    Cumings
2  Heikkinen
3   Futrelle
4      Allen
0 голосов
/ 16 сентября 2018

Разделите имена запятыми и возьмите первую часть каждого разделения:

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