operaciones - leer columnas en python
Cómo importar un archivo csv usando python con encabezados intactos, donde la primera columna es no numérica (3)
El módulo csv de Python maneja los datos por filas, que es la forma habitual de ver esos datos. Parece que quieres un enfoque basado en columnas. Aquí hay una forma de hacerlo.
Suponiendo que su archivo se llama myclone.csv
y contiene
workers,constant,age
w0,7.334,-1.406
w1,5.235,-4.936
w2,3.2225,-1.478
w3,0,0
este código debería darte una idea o dos:
>>> import csv
>>> f = open(''myclone.csv'', ''rb'')
>>> reader = csv.reader(f)
>>> headers = reader.next()
>>> headers
[''workers'', ''constant'', ''age'']
>>> column = {}
>>> for h in headers:
... column[h] = []
...
>>> column
{''workers'': [], ''constant'': [], ''age'': []}
>>> for row in reader:
... for h, v in zip(headers, row):
... column[h].append(v)
...
>>> column
{''workers'': [''w0'', ''w1'', ''w2'', ''w3''], ''constant'': [''7.334'', ''5.235'', ''3.2225'', ''0''], ''age'': [''-1.406'', ''-4.936'', ''-1.478'', ''0'']}
>>> column[''workers'']
[''w0'', ''w1'', ''w2'', ''w3'']
>>> column[''constant'']
[''7.334'', ''5.235'', ''3.2225'', ''0'']
>>> column[''age'']
[''-1.406'', ''-4.936'', ''-1.478'', ''0'']
>>>
Para obtener sus valores numéricos en flotantes, agregue esto
converters = [str.strip] + [float] * (len(headers) - 1)
por adelantado, y haz esto
for h, v, conv in zip(headers, row, converters):
column[h].append(conv(v))
para cada fila en lugar de las dos líneas similares anteriores.
Nota: En Python 3.5+, use next(reader, None)
o reader.__next__()
lugar de reader.next()
Esta es una elaboración de una pregunta anterior, pero a medida que profundizo en Python, me confundo más sobre cómo maneja python los archivos csv.
Tengo un archivo csv, y debe permanecer de esa manera (por ejemplo, no puedo convertirlo a un archivo de texto). Es el equivalente de una matriz o matriz de 5 filas por 11 columnas o vector.
He intentado leer en la csv utilizando varios métodos que he encontrado aquí y en otros lugares (por ejemplo, python.org
) para que se preserve la relación entre columnas y filas, donde la primera fila y la primera columna = valores no numéricos. El resto son valores flotantes y contienen una mezcla de flotantes positivos y negativos.
Lo que deseo hacer es importar el csv y compilarlo en python para que, si tuviera que hacer referencia a un encabezado de columna, devolvería sus valores asociados almacenados en las filas. Por ejemplo:
>>> workers, constant, age
>>> workers
w0
w1
w2
w3
constant
7.334
5.235
3.225
0
age
-1.406
-4.936
-1.478
0
Etcétera...
Estoy buscando técnicas para manejar este tipo de estructura de datos. Soy muy nuevo en Python.
Puede usar la biblioteca pandas y hacer referencia a las filas y columnas como esta:
import pandas as pd
input = pd.read_csv("path_to_file");
#for accessing ith row:
input.iloc[i]
#for accessing column named X
input.X
#for accessing ith row and column named X
input.iloc[i].X
Para Python 2
import csv
with open( <path-to-file>, "rb" ) as theFile:
reader = csv.DictReader( theFile )
for line in reader:
# line is { ''workers'': ''w0'', ''constant'': 7.334, ''age'': -1.406, ... }
# e.g. print( line[ ''workers'' ] ) yields ''w0''
Python tiene un poderoso controlador de CSV incorporado. De hecho, la mayoría de las cosas ya están incorporadas en la biblioteca estándar.
Para Python 3
Elimine el argumento rb
y use r
o no pase el argumento ( default read mode
).
with open( <path-to-file>, ''r'' ) as theFile:
reader = csv.DictReader(theFile)
for line in reader:
# line is { ''workers'': ''w0'', ''constant'': 7.334, ''age'': -1.406, ... }
# e.g. print( line[ ''workers'' ] ) yields ''w0''
print(line)