1
votes

Comment convertir et formater un csv en une liste de listes avec des noms d'en-tête inclus avec des valeurs

J'essaie de charger et de convertir un fichier csv en une liste de listes au format suivant:

Exemple: people.csv est au format:

[['Name=bob', 'Age=21', 'Sex=M'],['Name=Tina', 'Age=22', 'Sex=F'], ['Name=Tim','Age=25','Sex=M']] 

J'essaye de le convertir en liste de listes dans ce format:

Name | Age | Sex
----------------
bob  | 21  | M
Tina | 22  | F
Tim  | 25  | M

où le nom, l'âge et le sexe sont les en-têtes de colonne dans le fichier csv.

J'ai essayé de formater une valeur à la fois, mais y a-t-il une meilleure façon d'effectuer cette opération avec ou sans un dataframe pandas.

Merci


0 commentaires

3 Réponses :


1
votes

Utilisation du module csv -> csv.DictReader.

import csv

with open(filename) as infile:
    reader = csv.DictReader(infile)
    result = [["{}={}".format(k, v) for k, v in row.items()] for row in reader]
print(result)


0 commentaires

1
votes

Je recommande d'utiliser des pandas pour ce travail

parsedArr = [["Name=" + str(x[0]), "Age=" + str(x[1]), "sex=" + str(x[2])] for x in arr]

et maintenant vous avez un tableau 2D de toutes les valeurs du fichier.

Si vous souhaitez ajouter le titres "Name =" ou "age =" vous pouvez alors procéder soit à parcourir manuellement la liste ajouter ajouter les valeurs en utilisant la fonction suivante

import pandas as pd
df = pd.read_csv("file_name") #you can define if there is a header or not in the file
arr= df.values.tolist()

Ou, encore mieux, vous pouvez modifier le dataframe pour le faire pour vous en utilisant df.apply Modifier le DataFrame est une option beaucoup plus rapide


0 commentaires

2
votes

Peut-être pas la solution la plus élégante, mais facile à comprendre.

import pandas as pd
df = pd.read_csv("file_name")
entries = []
for i in range(0,len(df)
    tup = (df.loc[i,'Name'],df.loc[i,'Age'],df.loc[i,'sex']
    entries.append(tup)


0 commentaires