Cómo usar dos grupos de captura de expresiones regulares para hacer dos columnas de pandas
Tengo una columna de cadenas de marco de datos y quiero extraer números a otra columna:
column
1 abc123
2 def456
3 ghi789jkl012
He usado:
dataframe["newColumn"] = dataframe["column"].str.extract("(\d*\.?\d+)", expand=True)
Funciona, pero solo captura el primer bloque de números en una columna. Mi salida deseada es
column newColumn newColumn2
1 abc123 123 NaN
2 def456 456 NaN
3 ghi789jkl012 789 012
pero no puedo averiguar cómo hacerlo
Respuestas
3 jezrael
Usar Series.str.extractallcon Series.unstacky DataFrame.add_prefix, último agregar al DataFrame original mediante DataFrame.join:
df = dataframe.join(dataframe["column"].str.extractall("(\d*\.?\d+)")[0]
.unstack()
.add_prefix('newColumn'))
print (df)
column newColumn0 newColumn1
1 abc123 123 NaN
2 def456 456 NaN
3 ghi789jkl012 789 012
O puede usar (\d+)
, gracias @Manakin:
df = (dataframe.join(dataframe["column"].str.extractall("(\d+)")[0]
.unstack()
.add_prefix('newColumn'))
print (df)
wwnde
También puede usar split, expand = True y unirse de nuevo a df.
df.join(df.column.str.split('\D+', expand=True).replace({None: np.NaN}).rename({2:'newColumn2',1:'newColumn'},axis=1).iloc[:,-2::])
column newColumn newColumn2
1 abc123 123 NaN
2 def456 456 NaN
3 ghi789jkl012 789 012