Tengo un código que lee todos los archivos CSV en una carpeta determinada y los concatena en un archivo de Excel. Este código funciona siempre que los CSV tengan encabezados, pero me pregunto si hay una manera de alterar mi código si mis CSV no tienen encabezados.

Esto es lo que funciona:

path = r'C:\Users\Desktop\workspace\folder'          
all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    df = df[~df['Ran'].isin(['Active'])]
  
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)
frame.drop_duplicates(subset=None, inplace=True)

Lo que esto hace es eliminar cualquier fila en mis CSV con la palabra "Activo" debajo de la columna "Ran". Pero si no tuviera un encabezado "Ran" para esta columna, ¿hay otra forma de leer esto y hacer lo mismo?

¡Gracias de antemano!

0
Rockey 25 ago. 2020 a las 21:45

2 respuestas

La mejor respuesta
 df = df[~df['Ran'].isin(['Active'])]

En lugar de seleccionar una columna por nombre, selecciónela por índice. Si la columna 'Ran' es la tercera columna en el csv, use ...

 df = df[~df.iloc[:,2].isin(['Active'])]

Si algunos de sus archivos tienen encabezados y otros no, entonces probablemente debería mirar la primera línea de cada archivo antes de hacer un DataFrame con él.

for filename in all_files:
    with open(filename) as f:
        first = next(f).split(',')
        if first == ['my','list','of','headers']:
            header=0
            names=None
        else:
            header=None
            names=['my','list','of','headers']
        f.seek(0) 
        df = pd.read_csv(filename, index_col=None, header=header,names=names)

    df = df[~df['Ran'].isin(['Active'])]
1
wwii 25 ago. 2020 a las 19:07

Si entendí tu pregunta correctamente ...

Si falta el encabezado, pero conoce el formato de los datos, puede pasar las etiquetas de columna deseadas como una lista, como: ['id', 'thing1', 'ran', 'other_stuff'] al parámetro names de read_csv.

Según los pandas docs:

names: similar a una matriz, opcional
Lista de nombres de columna para usar. Si el archivo contiene una fila de encabezado, debe pasar explícitamente header=0 para anular los nombres de las columnas. No se permiten duplicados en esta lista.

0
S3DEV 25 ago. 2020 a las 18:57