Python Pandas - Reindexación
Reindexingcambia las etiquetas de fila y columna de un DataFrame. Para indexar medios para conformar los datos para que coincida con un determinado conjunto de etiquetas a lo largo de un eje particular.
Se pueden realizar varias operaciones mediante la indexación como:
Reordene los datos existentes para que coincidan con un nuevo conjunto de etiquetas.
Inserte marcadores de valor faltante (NA) en ubicaciones de etiquetas donde no existían datos para la etiqueta.
Ejemplo
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame({
'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
'x': np.linspace(0,stop=N-1,num=N),
'y': np.random.rand(N),
'C': np.random.choice(['Low','Medium','High'],N).tolist(),
'D': np.random.normal(100, 10, size=(N)).tolist()
})
#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print df_reindexed
Sus output es como sigue -
A C B
0 2016-01-01 Low NaN
2 2016-01-03 High NaN
5 2016-01-06 Low NaN
Reindexar para alinear con otros objetos
Es posible que desee tomar un objeto y volver a indexar sus ejes para que se etiqueten como otro objeto. Considere el siguiente ejemplo para entender lo mismo.
Ejemplo
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
df1 = df1.reindex_like(df2)
print df1
Sus output es como sigue -
col1 col2 col3
0 -2.467652 -1.211687 -0.391761
1 -0.287396 0.522350 0.562512
2 -0.255409 -0.483250 1.866258
3 -1.150467 -0.646493 -0.222462
4 0.152768 -2.056643 1.877233
5 -1.155997 1.528719 -1.343719
6 -1.015606 -1.245936 -0.295275
Note - Aquí, el df1 DataFrame se modifica y se vuelve a indexar como df2. Los nombres de las columnas deben coincidir o, de lo contrario, se agregará NAN para toda la etiqueta de la columna.
Llenado mientras se vuelve a indexar
reindex() toma un método de parámetro opcional que es un método de relleno con los siguientes valores:
pad/ffill - Rellenar valores hacia adelante
bfill/backfill - Rellenar valores al revés
nearest - Llenar a partir de los valores de índice más cercanos
Ejemplo
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')
Sus output es como sigue -
col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Data Frame with Forward Fill:
col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 -0.423455 -0.700265 1.133371
3 -0.423455 -0.700265 1.133371
4 -0.423455 -0.700265 1.133371
5 -0.423455 -0.700265 1.133371
Note - Las últimas cuatro filas están acolchadas.
Límites de llenado mientras se reindexa
El argumento de límite proporciona un control adicional sobre el llenado durante la reindexación. El límite especifica el recuento máximo de coincidencias consecutivas. Consideremos el siguiente ejemplo para entender lo mismo:
Ejemplo
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)
Sus output es como sigue -
col1 col2 col3
0 0.247784 2.128727 0.702576
1 -0.055713 -0.021732 -0.174577
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Data Frame with Forward Fill limiting to 1:
col1 col2 col3
0 0.247784 2.128727 0.702576
1 -0.055713 -0.021732 -0.174577
2 -0.055713 -0.021732 -0.174577
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Note- Observe, solo la séptima fila se llena con la sexta fila anterior. Luego, las filas se dejan como están.
Renombrar
El método rename () le permite volver a etiquetar un eje basándose en algún mapeo (un dict o Series) o una función arbitraria.
Consideremos el siguiente ejemplo para entender esto:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1
print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})
Sus output es como sigue -
col1 col2 col3
0 0.486791 0.105759 1.540122
1 -0.990237 1.007885 -0.217896
2 -0.483855 -1.645027 -1.194113
3 -0.122316 0.566277 -0.366028
4 -0.231524 -0.721172 -0.112007
5 0.438810 0.000225 0.435479
After renaming the rows and columns:
c1 c2 col3
apple 0.486791 0.105759 1.540122
banana -0.990237 1.007885 -0.217896
durian -0.483855 -1.645027 -1.194113
3 -0.122316 0.566277 -0.366028
4 -0.231524 -0.721172 -0.112007
5 0.438810 0.000225 0.435479
El método rename () proporciona una inplaceparámetro con nombre, que por defecto es Falso y copia los datos subyacentes. Pasarinplace=True para cambiar el nombre de los datos en su lugar.