es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Concatenando múltiples archivos .CSV grandes con estructuras variables

Tengo aproximadamente 40 archivos .csv (que van desde aproximadamente 100mb hasta 600mb) que me gustaría concatenar en un solo archivo .csv. Los datos que estoy utilizando han sido construidos utilizando un código predefinido de R de FNMA que agrega archivos de datos sin procesar más grandes en un formato más manejable. Sin embargo, al intentar concatenar los archivos de datos, recibo el siguiente error que indica que hay una diferencia en el número de campos entre los archivos: “ParserError: Error al tokenizar los datos. Error de C: Se esperaban 75 campos en la línea 10, se encontró 76”. He intentado unir los datos verticalmente para resolver este problema, ya que la mayoría de los campos entre los archivos son homogéneos, pero no he encontrado una solución razonable. Estoy pensando que tal vez tenga sentido reducir el código .R para escribir los campos que sé que existen, pero preferiría una solución utilizando Python ya que estos datos tardan mucho tiempo en procesarse y el código predefinido es bastante pesado. Incluiré a continuación el código de Python que he estado intentando utilizar (estoy dispuesto a compartir el código de .R si se solicita, pero tiene más de 600 líneas):

import os
import glob
import pandas as pd

# Establecer directorio de trabajo
os.chdir("directorio de la carpeta")

# Encontrar todos los archivos csv en la carpeta
# Utilizar coincidencia de patrón glob -> extensión = 'csv'
# Guardar el resultado en una lista -> all_filenames
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

# Imprimir(all_filenames)

# Combinar todos los archivos en la lista
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames], ignore_index=True, sort=False)

# Exportar a csv
combined_csv.to_csv("FNMA Data Aggregated.csv", index=False, encoding='utf-8-sig')
combined_csv
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay una discrepancia en el número de campos en una de las filas de los archivos .csv que se están concatenando. Una solución es investigar la fila identificada en el mensaje de error y verificar que esté correctamente formateada. Si no lo está, deberá corregirse en el archivo original antes de intentar concatenar los archivos nuevamente.

    Otra solución es utilizar la biblioteca pandas en Python para leer cada archivo individualmente, determinar qué columnas son comunes en todos los archivos y luego concatenar los archivos en esas columnas. Esto se puede lograr utilizando la función merge() en pandas.

    Aquí tienes un ejemplo de cómo utilizar la función merge() para concatenar archivos .csv con columnas comunes:

    import os
    import glob
    import pandas as pd
    
    # Establecer el directorio de trabajo
    os.chdir("directorio de la carpeta")
    
    # Encontrar todos los archivos csv en la carpeta
    # Utilizar coincidencia de patrones globales -> extensión = 'csv'
    # Guardar el resultado en una lista -> all_filenames
    extension = 'csv'
    all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
    
    # Leer el primer archivo para determinar las columnas en las que se realizará la fusión
    df = pd.read_csv(all_filenames[0])
    columnas_comunes = list(df.columns)
    
    # Recorrer los archivos restantes y fusionar en las columnas comunes
    for archivo in all_filenames[1:]:
        df2 = pd.read_csv(archivo)
        columnas_comunes = list(set(columnas_comunes) & set(df2.columns)) # actualizar las columnas comunes
        df = df.merge(df2[columnas_comunes], how='outer')
    
    # Exportar los datos combinados a un archivo csv
    df.to_csv("Datos Agregados FNMA.csv", index=False, encoding='utf-8-sig')
    

    Este código lee el primer archivo .csv para determinar qué columnas son comunes en todos los archivos. Luego recorre los archivos .csv restantes, fusionando cada archivo en las columnas comunes. Finalmente, exporta los datos combinados a un nuevo archivo .csv.

    Ten en cuenta que si el archivo .csv resultante sigue siendo demasiado grande para gestionarlo, puede ser beneficioso explorar otras opciones de almacenamiento, como las bases de datos SQL.

Comments are closed.