una tablas seleccionar para leer funciones filtrar filas fila extraer datos columnas python csv

python - tablas - seleccionar columnas en pandas



Python-reordenar columnas en un csv (5)

El módulo csv permite leer archivos csv con sus valores asociados a sus nombres de columna. Esto a su vez le permite reorganizar las columnas arbitrariamente, sin tener que permutar explícitamente las listas.

for row in csv.DictReader(open("foo.csv")): print row["b"], row["a"] 2 1 22 21

Dado el archivo foo.csv :

a,b,d,e,f 1,2,3,4,5 21,22,23,24,25

Tengo un montón de archivos csv con las mismas columnas pero en diferente orden. Estamos intentando cargarlos con SQL * Plus, pero necesitamos las columnas con una configuración de columna fija.

Ejemplo

orden requerida: ABCDEF

Archivo csv: ACDEB (a veces una columna no está en el csv porque no está disponible)

¿Se puede lograr con python? estamos usando Access + Macros para hacerlo ... pero lleva demasiado tiempo

PD. Lo siento si alguien se enoja por mis habilidades en inglés.


Por lo tanto, una forma de abordar este problema es usar la biblioteca de pandas , que se puede instalar fácilmente usando pip Básicamente, puede descargar el archivo csv en el marco de datos pandas y luego reordenar la columna y guardarla nuevamente en el archivo csv . Por ejemplo, si su sample.csv ve a continuación:

A,C,B,E,D a1,b1,c1,d1,e1 a2,b2,c2,d2,e2

Aquí hay un fragmento para resolver el problema.

import pandas as pd df = pd.read_csv(''/path/to/sample.csv'') df_reorder = df[[''A'', ''B'', ''C'', ''D'', ''E'']] # rearrange column here df_reorder.to_csv(''/path/to/sample_reorder.csv'', index=False)


Puede usar el módulo csv para leer, reordenar y luego escribir su archivo.

Archivo de muestra:

$ cat file.csv A,B,C,D,E a1,b1,c1,d1,e1 a2,b2,c2,d2,e2

Código

import csv with open(''file.csv'', ''r'') as infile, open(''reordered.csv'', ''a'') as outfile: # output dict needs a list for new column ordering fieldnames = [''A'', ''C'', ''D'', ''E'', ''B''] writer = csv.DictWriter(outfile, fieldnames=fieldnames) # reorder the header first writer.writeheader() for row in csv.DictReader(infile): # writes the reordered rows to the new file writer.writerow(row)

salida

$ cat reordered.csv A,C,D,E,B a1,c1,d1,e1,b1 a2,c2,d2,e2,b2


Puedes usar algo similar a this para cambiar el orden, reemplazando '';'' con '','' en tu caso. Como dijo que necesitaba hacer varios archivos .csv, podría usar el módulo glob para obtener una lista de sus archivos.

for file_name in glob.glob(''<Insert-your-file-filter-here>*.csv''): #Do the work here


csv_in = open("<filename>.csv", "r") csv_out = open("<filename>.csv", "w") for line in csv_in: field_list = line.split('','') # split the line at commas output_line = '',''.join(field_list[0], # rejoin with commas, new order field_list[2], field_list[3], field_list[4], field_list[1] ) csv_out.write(output_line) csv_in.close() csv_out.close()