python - para - seleccionar columnas de un dataframe pandas
Python-Imprimir la lista de cadenas CSV en columnas alineadas (2)
def printCsvStringListAsTable(csvStrings):
# convert to list of lists
csvStrings = map(lambda x: x.split('',''), csvStrings)
# get max column widths for printing
widths = []
for idx in range(len(csvStrings[0])):
columns = map(lambda x: x[idx], csvStrings)
widths.append(
len(
max(columns, key = len)
)
)
# print the csv strings
for row in csvStrings:
cells = []
for idx, col in enumerate(row):
format = ''%-'' + str(widths[idx]) + "s"
cells.append(format % (col))
print '' |''.join(cells)
if __name__ == ''__main__'':
printCsvStringListAsTable([
''col1,col2,col3,col4'',
''val1,val2,val3,val4'',
''abadfafdm,afdafag,aadfag,aadfaf'',
])
Salida:
col1 |col2 |col3 |col4
val1 |val2 |val3 |val4
abadfafdm |afdafag |aadfag |aadfaf
La respuesta de Alex Hall es definitivamente mejor y una forma concisa del mismo código que he escrito.
He escrito un fragmento de código que es totalmente compatible con Python 2
y Python 3
. El fragmento que escribí analiza datos y construye el resultado como una lista de cadenas de CSV .
El script proporciona una opción para:
- escribir los datos en un
CSV file
, o - mostrarlo a la
stdout
.
Si bien podría iterar fácilmente a través de la lista y reemplazarla ,
con /t
cuando se muestre a stdout
(segunda opción de viñeta), los ítems tienen una longitud arbitraria, por lo que no se alinee en un formato agradable debido a las variaciones en las pestañas.
He investigado un poco, y creo que las opciones de formato de cadena podrían lograr lo que busco. Dicho esto, parece que no puedo encontrar un ejemplo que me ayude a obtener la sintaxis correcta.
Preferiría no usar una biblioteca externa . Soy consciente de que hay muchas opciones disponibles si tomé esa ruta, pero quiero que el script sea lo más compatible y simple posible.
Aquí hay un ejemplo:
value1,somevalue2,value3,reallylongvalue4,value5,superlongvalue6
value1,value2,reallylongvalue3,value4,value5,somevalue6
¿Puedes ayudarme por favor? Cualquier sugerencia será muy apreciada.
import csv
from StringIO import StringIO
rows = list(csv.reader(StringIO(
''''''value1,somevalue2,value3,reallylongvalue4,value5,superlongvalue6
value1,value2,reallylongvalue3,value4,value5,somevalue6'''''')))
widths = [max(len(row[i]) for row in rows) for i in range(len(rows[0]))]
for row in rows:
print('' | ''.join(cell.ljust(width) for cell, width in zip(row, widths)))
Salida:
value1 | somevalue2 | value3 | reallylongvalue4 | value5 | superlongvalue6
value1 | value2 | reallylongvalue3 | value4 | value5 | somevalue6