Cuando se usa Python para procesar Excel en lotes, a menudo es necesario leer datos en lotes. La forma común es combinar glob
módulos, que pueden leer todos los csv en la carpeta actual en lotes y fusionarlos en uno grande DataFrame
.
df_list = []
for file in glob.glob("*.csv"):
df_list.append(pd.read_excel(file))
df = pd.concat(df_list)
Pero esto requiere que el formato y los nombres de columna de cada archivo csv que se lea sean iguales.
Si desea leer cada csv de forma independiente, puede usar os
el módulo para recorrer los archivos CSV en la carpeta actual y luego usar la read_csv
función Pandas para leer cada archivo.
import os
import pandas as pd
df_list = []
for file in os.listdir():
if file.endswith(".csv"):
df_list.append(pd.read_csv(file))
Ahora, df_list
cada elemento en es one DataFrame
, pero esto aún no es perfecto y aún debe extraerse manualmente de la lista al llamar.
Luego, cómo leer automáticamente todos los datos CSV en la carpeta actual y asignar cada CSV a una variable diferente
Puedes usar la función en Python globals()
, que devuelve un diccionario que contiene todas las variables globales del programa actual, por ejemplo, podemos usar la siguiente sintaxis para asignar un valor a una clave en el diccionario:
globals()[key] = value
Por lo tanto, use el siguiente código para leer automáticamente todos los datos CSV en la carpeta actual y asigne cada CSV a una variable diferente
df_list = []
for i, file in enumerate(os.listdir()):
if file.endswith(".csv"):
df_list.append(pd.read_csv(file))
for i, df in enumerate(df_list):
globals()[f'df{i+1}'] = df
Por supuesto, también se puede aplicar un método similar para leer diferentes hojas de Excel, por ejemplo, supongamos que data.xlsx
hay 10 hojas
df_list = [pd.read_excel("data.xlsx", sheet_name=i) for i in range(10)]
for i, df in enumerate(df_list):
globals()[f"df{i+1}"] = df
Si no sabe cuántas hojas tienen los datos, también puede usarlos sheet_name=None
y luego leerlos automáticamente de acuerdo con el diccionario devuelto
df_list = pd.read_excel("data.xlsx", sheet_name=None)
for i, (name, df) in enumerate(df_list.items()):
globals()[f"df_{name}"] = df