Teniendo en cuenta el marco de datos a continuación:

import pandas as pd

df = pd.DataFrame({'Ticker': ['EWZ US 05/29/20 P27', 'HSI US 12/30/20 C24800', 'TLT US 06/19/20 C225'],
                   'Market': ['US NYSE', 'US NYSE', 'HK HKSE']})
df

Necesito crear una nueva columna con todos los caracteres que aparecen antes del primer dígito en df['Ticker']. Intento lo siguiente:

numbers = [0,1,2,3,4,5,6,7,8,9]
f = lambda x: len(df['Ticker'].split(numbers)) -1
df['Reduced_Ticker'] = df.apply(f, axis=1)

Pero recibo el siguiente error: 'Series' object has no attribute 'split'. ¿Alguien puede ayudar? Resultado esperado:

        Ticker         |  Market | Reduced_Ticker
EWZ US 05/29/20 P27    | US NYSE | EWZ US
HSI US 12/30/20 C24800 | US NYSE | HSI US
TLT US 06/19/20 C225   | HK HKSE | HK HKSE
2
Costa.Gustavo 14 ene. 2021 a las 23:39

2 respuestas

La mejor respuesta

O, asumiendo que lo que proporcionó es una representación completa de su marco de datos, puede hacer algo con split() (en el segundo espacio) y join():

df['Reduced_Ticker'] = df['Ticker'].apply(lambda a :" ".join(a.split(" ", 2)[:2]))

                   Ticker   Market     new Reduced_Ticker
0     EWZ US 05/29/20 P27  US NYSE  EWZ US         EWZ US
1  HSI US 12/30/20 C24800  US NYSE  HSI US         HSI US
2    TLT US 06/19/20 C225  HK HKSE  TLT US         TLT US
1
sophods 14 ene. 2021 a las 20:48

Tratar:

df['Reduced_Ticker'] = df['Ticker'].str.extract('^(\D+)')

Salida (espacio extra al final):

                   Ticker   Market Reduced_Ticker
0     EWZ US 05/29/20 P27  US NYSE        EWZ US 
1  HSI US 12/30/20 C24800  US NYSE        HSI US 
2    TLT US 06/19/20 C225  HK HKSE        TLT US 

Para eliminar el espacio final, encadena con str.strip():

df['Ticker'].str.extract('^(\D+)')[0].str.strip()
3
Quang Hoang 14 ene. 2021 a las 20:47
65726572