Obtenga la última “columna” después de la operación .str.split () en la columna en pandas DataFrame

Tengo una columna en un dataframe de pandas que me gustaría dividir en un solo espacio. La división es bastante simple con DataFrame.str.split(' ') , pero no puedo crear una nueva columna desde la última entrada. Cuando .str.split() la columna obtengo una lista de arrays y no sé cómo manipular esto para obtener una nueva columna para mi DataFrame.

Aquí hay un ejemplo. Cada entrada en la columna contiene ‘precio de datos de símbolos’ y me gustaría dividir el precio (y eventualmente eliminar la “p” … o “c” en la mitad de los casos).

 import pandas as pd temp = pd.DataFrame({'ticker' : ['spx 5/25/2001 p500', 'spx 5/25/2001 p600', 'spx 5/25/2001 p700']}) temp2 = temp.ticker.str.split(' ') 

cuyos rendimientos

 0 ['spx', '5/25/2001', 'p500'] 1 ['spx', '5/25/2001', 'p600'] 2 ['spx', '5/25/2001', 'p700'] 

Pero temp2[0] solo da una matriz de entrada de lista y temp2[:][-1] falla. ¿Cómo puedo convertir la última entrada en cada matriz a una nueva columna? ¡Gracias!

Podría usar el método tolist como intermediario:

 In [99]: import pandas as pd In [100]: d1 = pd.DataFrame({'ticker' : ['spx 5/25/2001 p500', 'spx 5/25/2001 p600', 'spx 5/25/2001 p700']}) In [101]: d1.ticker.str.split().tolist() Out[101]: [['spx', '5/25/2001', 'p500'], ['spx', '5/25/2001', 'p600'], ['spx', '5/25/2001', 'p700']] 

A partir de la cual podrías hacer un nuevo DataFrame:

 In [102]: d2 = pd.DataFrame(d1.ticker.str.split().tolist(), .....: columns="symbol date price".split()) In [103]: d2 Out[103]: symbol date price 0 spx 5/25/2001 p500 1 spx 5/25/2001 p600 2 spx 5/25/2001 p700 

Por si acaso, podrías arreglar el precio:

 In [104]: d2["price"] = d2["price"].str.replace("p","").astype(float) In [105]: d2 Out[105]: symbol date price 0 spx 5/25/2001 500 1 spx 5/25/2001 600 2 spx 5/25/2001 700 

PD: pero si realmente quieres la última columna, basta con apply :

 In [113]: temp2.apply(lambda x: x[2]) Out[113]: 0 p500 1 p600 2 p700 Name: ticker 

Hacer esto:

 In [43]: temp2.str[-1] Out[43]: 0 p500 1 p600 2 p700 Name: ticker 

https://pandas.pydata.org/pandas-docs/stable/text.html

 s2 = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h']) s2.str.split('_').str.get(1) 

o

 s2.str.split('_').str[1] 

Utilizando Pandas 0.20.3:

 In [10]: import pandas as pd ...: temp = pd.DataFrame({'ticker' : ['spx 5/25/2001 p500', 'spx 5/25/2001 p600', 'spx 5/25/2001 p700']}) ...: In [11]: temp2 = temp.ticker.str.split(' ', expand=True) # the expand=True return a DataFrame In [12]: temp2 Out[12]: 0 1 2 0 spx 5/25/2001 p500 1 spx 5/25/2001 p600 2 spx 5/25/2001 p700 In [13]: temp3 = temp.join(temp2[2]) In [14]: temp3 Out[14]: ticker 2 0 spx 5/25/2001 p500 p500 1 spx 5/25/2001 p600 p600 2 spx 5/25/2001 p700 p700