tutorial tablas recorrer para leer graficar funciones español documentacion datos data curso con python pandas vectorization

python - tablas - Diferencia entre mapa, mapa de aplicación y métodos de aplicación en Pandas



pandas python tutorial español pdf (8)

@jeremiahbuddha mencionó que aplicar trabajos en filas / columnas, mientras que applymap funciona de forma elemental. Pero parece que todavía puedes usar aplicar para el cálculo de elementos ...

frame.apply(np.sqrt) Out[102]: b d e Utah NaN 1.435159 NaN Ohio 1.098164 0.510594 0.729748 Texas NaN 0.456436 0.697337 Oregon 0.359079 NaN NaN frame.applymap(np.sqrt) Out[103]: b d e Utah NaN 1.435159 NaN Ohio 1.098164 0.510594 0.729748 Texas NaN 0.456436 0.697337 Oregon 0.359079 NaN NaN

¿Me puede decir cuándo usar estos métodos de vectorización con ejemplos básicos?

Veo que el map es un método en Series , mientras que el resto son métodos DataFrame . Aunque me confundí acerca de los métodos de apply y apply applymap . ¿Por qué tenemos dos métodos para aplicar una función a un DataFrame? ¡Nuevamente, ejemplos simples que ilustran el uso serían geniales!


Agregando a las otras respuestas, en una Series también hay map y apply .

Aplicar puede hacer un DataFrame fuera de una serie ; Sin embargo, el mapa solo colocará una serie en cada celda de otra serie, lo que probablemente no sea lo que quieres.

In [40]: p=pd.Series([1,2,3]) In [41]: p Out[31]: 0 1 1 2 2 3 dtype: int64 In [42]: p.apply(lambda x: pd.Series([x, x])) Out[42]: 0 1 0 1 1 1 2 2 2 3 3 In [43]: p.map(lambda x: pd.Series([x, x])) Out[43]: 0 0 1 1 1 dtype: int64 1 0 2 1 2 dtype: int64 2 0 3 1 3 dtype: int64 dtype: object

Además, si tuviera una función con efectos secundarios, como "conectarse a un servidor web", probablemente usaría " apply solo por motivos de claridad.

series.apply(download_file_for_every_element)

Map puede usar no solo una función, sino también un diccionario u otra serie. Digamos que quieres manipular las permutations .

Tomar

1 2 3 4 5 2 1 4 5 3

El cuadrado de esta permutación es

1 2 3 4 5 1 2 5 3 4

Puedes calcularlo usando el map . No estoy seguro si la auto-solicitud está documentada, pero funciona en 0.15.1 .

In [39]: p=pd.Series([1,0,3,4,2]) In [40]: p.map(p) Out[40]: 0 0 1 1 2 4 3 2 4 3 dtype: int64


Directamente de Python para el análisis de datos de Wes McKinney, pág. 132 (Recomiendo este libro):

Otra operación frecuente es aplicar una función en matrices 1D a cada columna o fila. El método de aplicación de DataFrame hace exactamente esto:

In [116]: frame = DataFrame(np.random.randn(4, 3), columns=list(''bde''), index=[''Utah'', ''Ohio'', ''Texas'', ''Oregon'']) In [117]: frame Out[117]: b d e Utah -0.029638 1.081563 1.280300 Ohio 0.647747 0.831136 -1.549481 Texas 0.513416 -0.884417 0.195343 Oregon -0.485454 -0.477388 -0.309548 In [118]: f = lambda x: x.max() - x.min() In [119]: frame.apply(f) Out[119]: b 1.133201 d 1.965980 e 2.829781 dtype: float64

Muchas de las estadísticas de matrices más comunes (como suma y media) son métodos DataFrame, por lo que no es necesario usar apply.

También se pueden usar funciones de Python en cuanto a elementos. Supongamos que desea calcular una cadena con formato de cada valor de punto flotante en el marco. Puedes hacer esto con applymap:

In [120]: format = lambda x: ''%.2f'' % x In [121]: frame.applymap(format) Out[121]: b d e Utah -0.03 1.08 1.28 Ohio 0.65 0.83 -1.55 Texas 0.51 -0.88 0.20 Oregon -0.49 -0.48 -0.31

La razón para el nombre applymap es que Series tiene un método de mapa para aplicar una función de elementos:

In [122]: frame[''e''].map(format) Out[122]: Utah 1.28 Ohio -1.55 Texas 0.20 Oregon -0.31 Name: e, dtype: object

En resumen, apply trabajos en base a una fila / columna de un DataFrame, applymap funciona de manera elemental en un DataFrame, y el map funciona de manera elemental en una Serie.


Hay una gran información en estas respuestas, pero estoy agregando la mía para resumir con claridad qué métodos funcionan de forma inteligente en comparación con los elementos. jeremiahbuddha en su mayoría hizo esto pero no mencionó Series.apply. No tengo el representante para comentar.

  • DataFrame.apply opera en filas o columnas completas a la vez.

  • DataFrame.applymap , Series.apply y Series.map operan en un elemento a la vez.

Existe una gran cantidad de superposición entre las capacidades de Series.apply y Series.map , lo que significa que cualquiera de los dos funcionará en la mayoría de los casos. Sin embargo, tienen algunas diferencias leves, algunas de las cuales fueron discutidas en la respuesta de osa.


Mi punto de vista:

Desde el punto de vista de la función:

Si la función tiene variables que deben compararse dentro de una columna / fila, use apply .

por ejemplo: lambda x: x.max()-x.mean() .

Si la función se aplica a cada elemento:

1> Si se localiza una columna / fila, use apply

2> Si se aplica a todo el marco de datos, use applymap

majority = lambda x : x > 17 df2[''legal_drinker''] = df2[''age''].apply(majority) def times10(x): if type(x) is int: x *= 10 return x df2.applymap(times10)


Probablemente la explicación más simple es la diferencia entre Apply y ApplyMap:

aplicar toma la columna completa como un parámetro y luego asigna el resultado a esta columna

applymap toma el valor de la celda por separado como un parámetro y asigna el resultado a esta celda.

NB Si aplicar devuelve el valor único, tendrá este valor en lugar de la columna después de la asignación y, finalmente, tendrá solo una fila en lugar de una matriz.


Sólo quería señalar, ya que luché con esto por un poco

def f(x): if x < 0: x = 0 elif x > 100000: x = 100000 return x df.applymap(f) df.describe()

Esto no modifica el propio marco de datos, tiene que ser reasignado.

df = df.applymap(f) df.describe()


Mapa: itera sobre cada elemento de una serie.

df[‘column1’].map(lambda x: 10+x),

esto agregará 10 a cada elemento de column1.

df[‘column2’].map(lambda x: ‘AV’+x),

esto concatenará "AV" al principio de cada elemento de la columna 2 (el formato de la columna es una cadena).

Aplicar: como su nombre indica, aplica una función a lo largo de cualquier eje del marco de datos.

df[[‘column1’,’column2’]].apply(sum),

devolverá la suma de todos los valores de column1 y column2.

ApplyMap: esto ayuda a aplicar una función a cada elemento del marco de datos.

func = lambda x: x+2

df.applymap(func),

agregará 2 a cada elemento de dataframe (todas las columnas de dataframe deben ser de tipo numérico)

fuente: mapa en pandas