Ceci est une élaboration d’une question précédente, mais au fur et à mesure que je fouille plus profondément dans python, je ne sais plus trop comment python gère les fichiers csv.
J'ai un fichier csv et il doit rester tel (par exemple, je ne peux pas le convertir en fichier texte). C'est l'équivalent d'un tableau, d'une matrice ou d'un vecteur de 5 lignes sur 11 colonnes.
J'ai essayé de lire dans le CSV en utilisant diverses méthodes que j'ai trouvées ici et à d'autres endroits (par exemple, python.org
) afin de préserver la relation entre les colonnes et les lignes, où la première ligne et la première colonne = des valeurs non numériques. Les autres sont des valeurs de flottant et contiennent un mélange de flottants positifs et négatifs.
Ce que je souhaite, c'est importer le fichier csv et le compiler dans python) de sorte que, si je faisais référence à un en-tête de colonne, celui-ci renverrait ses valeurs associées stockées dans les lignes. Par exemple:
>>> workers, constant, age
>>> workers
w0
w1
w2
w3
constant
7.334
5.235
3.225
0
age
-1.406
-4.936
-1.478
0
Et ainsi de suite...
Je recherche des techniques pour gérer ce type de structure de données. Je suis très nouveau en python.
Le module csv de Python traite les données par lignes, ce qui est la manière habituelle de visualiser ces données. Vous semblez vouloir une approche par colonne. Voici une façon de le faire.
En supposant que votre fichier s'appelle myclone.csv
et contient
workers,constant,age
w0,7.334,-1.406
w1,5.235,-4.936
w2,3.2225,-1.478
w3,0,0
ce code devrait vous donner une ou deux idées:
>>> import csv
>>> f = open('myclone.csv', 'rb')
>>> reader = csv.reader(f)
>>> headers = next(reader, None)
>>> 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']
>>>
Pour obtenir vos valeurs numériques dans les flottants, ajoutez ceci
converters = [str.strip] + [float] * (len(headers) - 1)
à l'avant, et le faire
for h, v, conv in Zip(headers, row, converters):
column[h].append(conv(v))
pour chaque ligne au lieu des deux lignes similaires ci-dessus.
Pour 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 a un puissant gestionnaire CSV intégré. En fait, la plupart des éléments sont déjà intégrés à la bibliothèque standard.
Pour Python
Supprimez l'argument rb
et utilisez r
ou ne transmettez pas l'argument (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)
Vous pouvez utiliser la bibliothèque pandas et référencer les lignes et les colonnes comme ceci:
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