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