from example columns column python string pandas split

example - split python



Obtenga la última "columna" después de la operación.str.split() en la columna en panda DataFrame (4)

Hacer esto:

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

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 I .str.split() la columna obtengo una lista de matrices 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ímbolo'' 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] . ¿Cómo puedo convertir la última entrada en cada arreglo a una nueva columna? ¡Gracias!


Puede 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'']]

Desde el cual puedes crear 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

Para una buena medida, podría fijar 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, apply sería suficiente:

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


Usando 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