J'ai un fichier csv

col1      col2
a          1     
a          2        
a          3    
b          3      
b          6    
b          1  

J'utilise ce code

import csv

result = {}

with open('data.csv', 'rb') as csvfile:
    csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in csvreader:
        if row[0] in result:
            result[row[0]].append(row[1])
        else:
            result[row[0]] = [row[1]]

print result

output 
result:{
    'a': ['1', '2', '3'], 
    'b': ['3', '6', '1'] 
}

Maintenant, je veux enregistrer ce résultat dans un fichier csv (je veux utiliser cette méthode) result.csv

Un b
1 3
2 6
3 1

RÉSOLU

df_zor = pd.read_csv('5_gecici_.csv', encoding = "windows-1250", sep=';')
df = df_zor.groupby("gorevli").agg(lambda x: x.unique().tolist()).T
df.apply(lambda x: np.pad(x.iloc[0], (0, df.apply(lambda x: len(x.iloc[0]), axis=0).max() - len(x.iloc[0])), 'constant', constant_values=np.nan), axis=0)[df_zor.gorevli.unique()].to_excel('5_gorevli_bazinda_incelemede_dosya_listesi.xlsx', index=False)
0
eroniko 13 juin 2020 à 18:54

3 réponses

Meilleure réponse

Vous pouvez utiliser le code suivant:

to_csv = []

#to get 'a' and 'b' in first row
to_csv.append(list(result.keys()))

# To get 'a' and 'b' values
for a,b in  zip(*list(result.values())):
    to_csv.append([a,b])

# Writing result.csv
with open('result.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(to_csv)

Les données dans result.csv sont:

a,b
1,3
2,6
3,1
1
Mohnish 13 juin 2020 à 16:27

Ajoutez simplement ceci à la fin:

with open('output.csv', 'w') as fw:
    cw = csv.writer(fw, delimiter=',')
    row_list = list(result.keys()) + [x for x in zip(*result.values())]
    cw.writerows(row_list)

EDIT: Je vois que ma réponse est un peu tardive. Ma réponse est identique à la réponse @Mohnish sauf que j'utilise une «compréhension de liste» au lieu de boucler explicitement l'objet zip. La réponse @Mohnish a plus d'explications, alors allez-y.

EDIT: Fondamentalement, au lieu de ceci:

# To get 'a' and 'b' values
for a,b in  zip(*list(result.values())):
    to_csv.append([a,b])

Faites ceci:

to_csv += [x for x in zip(*result.values())]
0
Peaceful James 13 juin 2020 à 20:14

Vous pouvez utiliser des pandas

import pandas as pd
results_df = pd.DataFrame(data=result)
results_df.to_csv("result.csv", index=False)
0
Luv 13 juin 2020 à 16:13