Pandas Build DataFrame fila por fila

Salman Mehmood 21 junio 2023
  1. Crear filas en Pandas DataFrame
  2. Uso de la función loc() para crear filas en Pandas DataFrame
  3. Uso de la función pandas.concat() para crear filas en Pandas DataFrame
Pandas Build DataFrame fila por fila

Este artículo demuestra cómo construir un marco de datos en filas en lugar de la convención en columnas que se sigue habitualmente en Pandas.

Crear filas en Pandas DataFrame

Pandas DataFrame es una estructura que almacena datos con dos dimensiones y las etiquetas correspondientes a esas dimensiones. Los marcos de datos son comparables a las tablas y hojas de cálculo SQL que se pueden manipular en aplicaciones como Excel y Calc.

Debido a que son un componente esencial de los ecosistemas Python y NumPy, los marcos de datos suelen ser superiores a las tablas y hojas de cálculo en términos de velocidad, facilidad de uso y potencia. Este es el caso de muchas aplicaciones.

Como estructura de almacenamiento de datos, en función de una condición específica, puede ser necesario que los datos se ingresen fila por fila en lugar de columna por columna.

Considere el siguiente código.

import pandas

df = pandas.DataFrame(
    columns=["a", "b", "c", "d", "e"], index=["v", "w", "x", "y", "z"]
)
y = {"a": 1, "b": 5, "c": 2, "d": 3, "e": 7}

print("Attempt 1")
# df['y'] = y
# print(df)

print("Attempt 2")
# df.join(y)

Los siguientes resultados de cada intento se escriben por separado.

Salida (Intento 1):

Attempt 1
     a    b    c    d    e   y
v  NaN  NaN  NaN  NaN  NaN NaN
w  NaN  NaN  NaN  NaN  NaN NaN
x  NaN  NaN  NaN  NaN  NaN NaN
y  NaN  NaN  NaN  NaN  NaN NaN
z  NaN  NaN  NaN  NaN  NaN NaN

Salida (Intento 2):

Traceback (most recent call last):
  File "d:\Test\test.py", line 13, in <module>
    df.join(y)
  File "C:\Program Files\Python310\lib\site-packages\pandas\core\frame.py", line 9969, in join
    return self._join_compat(
  File "C:\Program Files\Python310\lib\site-packages\pandas\core\frame.py", line 10036, in _join_compat
    can_concat = all(df.index.is_unique for df in frames)
  File "C:\Program Files\Python310\lib\site-packages\pandas\core\frame.py", line 10036, in <genexpr>
    can_concat = all(df.index.is_unique for df in frames)

AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'

En el código anterior, primero se inicializa una instancia de DataFrame, con columnas ['a','b','c','d', 'e'] con índices ['v', 'w','x','y','z']. El objetivo principal es agregar elementos por filas, que, como se desprende del código en nuestro caso, es y.

Los datos a ingresar en la entrada se inicializan, con los valores correspondientes a cada columna dados como {'a':1, 'b':5, 'c':2, 'd':3, 'e': 7}.

En el primer intento, los datos creados se asignan al DataFrame configurándolo en el índice y, usando df[y]. Pero, como se ve en la salida, se crea una nueva columna, con todos sus miembros siendo NaN, como con todos los demás elementos.

En el segundo intento, se usa el método join() para tratar de unir los datos declarados al propio DataFrame, lo que también da un error, el objeto "función_integrada_o_método' no tiene atributo 'es_único'". Este problema se puede abordar con las siguientes técnicas que se mencionan a continuación.

  • Uso de la función loc().
  • Uso de la función pandas.concat().

Uso de la función loc() para crear filas en Pandas DataFrame

Considere el siguiente código:

import pandas

df = pandas.DataFrame(
    columns=["a", "b", "c", "d", "e"], index=["v", "w", "x", "y", "z"]
)
print("Current Shape:\n" + str(df))

y = {"a": 1, "b": 5, "c": 2, "d": 3, "e": 7}
df.loc["y"] = pandas.Series(y)

print("DataFrame:\n" + str(df))

Producción :

Current Shape:

     a    b    c    d    e
v  NaN  NaN  NaN  NaN  NaN
w  NaN  NaN  NaN  NaN  NaN
x  NaN  NaN  NaN  NaN  NaN
y  NaN  NaN  NaN  NaN  NaN
z  NaN  NaN  NaN  NaN  NaN

DataFrame:

     a    b    c    d    e
v  NaN  NaN  NaN  NaN  NaN
w  NaN  NaN  NaN  NaN  NaN
x  NaN  NaN  NaN  NaN  NaN
y    1    5    2    3    7
z  NaN  NaN  NaN  NaN  NaN

La propiedad loc de la clase DataFrame se utiliza para acceder a una fila o columna de un DataFrame. La propiedad loc permite el acceso a una o un grupo de filas y columnas y una matriz booleana.

En nuestro código, usamos la propiedad loc ya que la propiedad está basada en etiquetas. De ahí pasamos la etiqueta (o índice) deseada, y en nuestro caso.

Tenga en cuenta que panda.Series() es para alinear la entrada en caso de que no tenga que especificar todos los elementos.

Uso de la función pandas.concat() para crear filas en Pandas DataFrame

Considere el siguiente código:

import pandas

df = pandas.DataFrame(columns=["a", "b", "c", "d", "e"], index=[])
print("Current Shape:\n" + str(df))

entry = pandas.DataFrame.from_dict(
    {
        "a": [1, 6, 11, 16],
        "b": [2, 7, 12, 17],
        "c": [3, 8, 13, 18],
        "d": [4, 9, 14, 19],
        "e": [5, 10, 15, 20],
    }
)

df = pandas.concat([df, entry])
print("DataFrame:\n" + str(df))

Producción :

Current Shape:
Empty DataFrame
Columns: [a, b, c, d, e]
Index: []
DataFrame:
    a   b   c   d   e
0   1   2   3   4   5
1   6   7   8   9  10
2  11  12  13  14  15
3  16  17  18  19  20

Se declara el método from_dict(), que contiene un diccionario que contiene los nombres de las columnas y sus valores correspondientes, a partir del cual se crea un nuevo DataFrame. Esta instancia de DataFrame recién creada se almacena en la variable llamada entrada, que corresponde a los nuevos elementos que queremos agregar a nuestro DataFrame original.

Después de que se crea el marco de datos y se asignan los datos al marco de datos, ahora debemos encontrar una manera de unir las dos instancias de marco de datos. Usando el método pandas.concat(), podemos concatenar dos instancias de DataFrame, y el DataFrame resultante se almacena en la primera instancia.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Pandas DataFrame