Me gustaría convertir columnas de mi archivo csv en matrices en python, sin embargo, quiero que el primer valor en cada columna (la primera fila) sean los nombres de las matrices.

He probado esto:

import csv

data = csv.reader(open('products.csv', 'r'), delimiter=",", quotechar='|')
column1, column2 = [], []

for row in data:
    column1.extend(row[0])
    column2.extend(row[1])

print(column1)
print(column2)

Sin embargo, esto le da carácter por carácter y no hace que el nombre de la matriz sea el primer valor.

Aquí está mi archivo csv.

name,description,price
Apples,A bag of 3 apples,1.75
White Bread,A loaf of white bread,1.90
Wholemeal Bread,A loag of wholemeal bread,1.45

Debe ser expandible (no codificado / agregaré a este archivo más adelante)

Los resultados esperados son 3 matrices.

name = []
description = []
price = []

Y los valores se alinean, p. El índice 0 en todas las matrices será la primera columna, etc.

0
Fin Harris 30 sep. 2019 a las 23:15

3 respuestas

La mejor respuesta

Si tiene una gran cantidad de muestras en el archivo csv y no desea construir el objeto DataFrame, puede usar el módulo csv y extraer sus listas de forma iterativa sin cargar datos completos en la memoria:

import csv

csv_file = 'sample.csv'

names = []
description = []
price = []

with open(csv_file, 'r') as f:
    reader = csv.DictReader(f)
    for row in reader:
        names.append(row.get('name'))
        description.append(row.get('description'))
        price.append(row.get('price'))

print(names)
## ['Apples', 'White Bread', 'Wholemeal Bread']

print(description)
## ['A bag of 3 apples', 'A loaf of white bread', 'A loag of wholemeal bread']

print(price)
## ['1.75', '1.90', '1.45']
0
Eduard Ilyasov 1 oct. 2019 a las 05:04

Recomiendo encarecidamente utilizar un Pandas DataFrame para esto. Hacer

pip3 install pandas

Luego, en su código de Python,

import pandas as pd

df = pd.read_csv('products.csv')

En una consola de Python interactiva, puede explorar la estructura de este DataFrame

%% Get the 'name' column
df['name']

%% Get the 'description' column
description = df['description']

%% Get it in a numpy array
description = df['description'].values

%% Get the row named 'Apples'
Apples = df[df['name'] == 'Apples']

¡Espero que esto ayude!

2
Tiger Nie 30 sep. 2019 a las 20:22

Digamos que la csv es

A, B, C
1, a, x
2, b, y
3, c, z

Puede usar exec para configurar todas las variables que necesita en una lista mayor.

Supongamos que las listas ya están construidas de la siguiente manera

[[1, 2, 3], [a, b, c], [x, y, z]] # This should be fairly straightforward.
# data is the lists
# row is the first row
for i in range(len(row)):
   exec(row[i] + " = " + str(data[i]))

# Now all the variables should be defined 
# >>> A
# [1, 2, 3]
# ...
0
Cosmos Zhu 30 sep. 2019 a las 20:26
58174752