Saltar al contenido

Cómo agregar un solo elemento a una Serie Pandas

No olvides que en la informática cualquier problema casi siempre tiene diferentes soluciones, pero nosotros te compartiremos lo más óptimo y eficiente.

Solución:

Cómo agregar un solo artículo. Esto no es muy efectivo pero sigue lo que estás pidiendo:

x = p.Series()
N = 4
for i in xrange(N):
   x = x.set_value(i, i**2)

produce x:

0    0
1    1
2    4
3    9

Obviamente, hay mejores formas de generar esta serie en una sola toma.

Para su segunda pregunta, verifique la respuesta y las referencias de la pregunta SO, agregue una fila en pandas.DataFrame.

TLDR: no agregue elementos a una serie uno por uno, mejor amplíe con una colección ordenada

Creo que la pregunta en su forma actual es un poco complicada. Y la respuesta aceptada responde a la pregunta. Pero cuanto más uso pandas, más comprendo que es una mala idea agregar elementos a una Serie uno por uno. Intentaré explicar por qué para los pandas principiantes.

Puede pensar que agregar datos a una Serie determinada podría permitirle reutilizar algunos recursos, pero en realidad una Serie es solo un contenedor que almacena una relación entre un índice y un valor. array. Cada uno es un numpy.array bajo el capó, y el índice es inmutable. Cuando agrega a la serie un elemento con una etiqueta que falta en el índice, se crea un nuevo índice con tamaño n+1 y un nuevo valor valores array del mismo tamaño. Eso significa que cuando agrega elementos uno por uno, crea dos matrices más del tamaño n+1 en cada paso.

Por cierto, no puede agregar un nuevo elemento por posición (obtendrá un IndexError) y la etiqueta en un índice no tiene que ser única, es decir, cuando asigna un valor con una etiqueta, asigna el valor a todos elementos existentes con la etiqueta, y no se agrega una nueva fila en este caso. Esto podría conducir a errores sutiles.

La moraleja de la historia es que no debes agregar los datos uno por uno, es mejor que los extiendas con una colección ordenada. El problema es que no puedes extender una Serie en el lugar. Por eso es mejor organizar su código para que no necesite actualizar una instancia específica de una Serie por referencia.

Si crea etiquetas usted mismo y están aumentando, la forma más fácil es agregar nuevos elementos a un diccionario, luego crear una nueva Serie desde el diccionario (clasifica los keys) y agregue la serie a una anterior. Si el keys no aumentan, entonces deberá crear dos listas separadas para las nuevas etiquetas y los nuevos valores.

A continuación se muestran algunos ejemplos de código:

In [1]: import pandas as pd
In [2]: import numpy as np

In [3]: s = pd.Series(np.arange(4)**2, index=np.arange(4))

In [4]: s
Out[4]:
0    0
1    1
2    4
3    9
dtype: int64

In [6]: id(s.index), id(s.values)
Out[6]: (4470549648, 4470593296)

Cuando actualizamos un elemento existente, el índice y los valores array permanecer igual (si no cambia el tipo del valor)

In [7]: s[2] = 14  

In [8]: id(s.index), id(s.values)
Out[8]: (4470549648, 4470593296)

Pero cuando agrega un nuevo elemento, un nuevo índice y nuevos valores array es generado:

In [9]: s[4] = 16

In [10]: s
Out[10]:
0     0
1     1
2    14
3     9
4    16
dtype: int64

In [11]: id(s.index), id(s.values)
Out[11]: (4470548560, 4470595056)

Es decir, si va a agregar varios elementos, recójalos en un diccionario, cree una Serie, agréguela a la anterior y guarde el resultado:

In [13]: new_items = item: item**2 for item in range(5, 7)

In [14]: s2 = pd.Series(new_items)

In [15]: s2  # keys are guaranteed to be sorted!
Out[15]:
5    25
6    36
dtype: int64

In [16]: s = s.append(s2); s
Out[16]:
0     0
1     1
2    14
3     9
4    16
5    25
6    36
dtype: int64

Si tiene un índice y un valor. Luego puede agregar a Series como:

obj = Series([4,7,-5,3])
obj.index=['a', 'b', 'c', 'd']

obj['e'] = 181

esto agregará un nuevo valor a Serie (al final de Serie).

Si conservas algún recelo o capacidad de medrar nuestro enunciado te insinuamos realizar una reseña y con deseo lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *