web-dev-qa-db-fra.com

La liste Python au format csv génère une erreur: itérable attendue, pas numpy.int64

Je veux écrire une liste dans un csv, en essayant de le faire je reçois l'erreur ci-dessous

out.writerows(fin_city_ids)
_csv.Error: iterable expected, not numpy.int64

Mon code est comme ci-dessous

org_id.append([pol_id,bldest_id])
fin_ids=list(org_city_id['org_id'].unique())
print(fin_ids)

out = csv.writer(open("D:/dataset/fin_ids.csv","w"), delimiter='|')
out.writerows(fin_ids)

Voici le résultat de fin_ids

[1002774, 0, 1000702, 1000339, 1001620, 1000710, 1000202, 1003143, 147897, 31018, 1001502, 1002812, 1003026, 1003280, 1003289, 1002714, 133191, 5252218, 6007821, 1002632]

Org_id est un dataFrame contenant des identifiants en double .fin_ids est une liste contenant des valeurs d'identificateur identiques. Fin ID est une liste d'identifiants uniques dérivés du cadre de données org_id.

la sortie souhaitée est un fichier CSV avec toutes les valeurs dans des lignes séparées, car je vais charger les données dans une table SQL ultérieurement.

5
arpit joshi

Vous pouvez le faire de plusieurs manières. Mais si vous souhaitez writerows à partir du module csv, vous devrez d'abord transformer votre liste fin_ids en une séquence de listes:

fin_ids = [1002774, 0, 1000702, 1000339, 
   1001620, 1000710, 1000202, 1003143, 147897, 
   31018, 1001502, 1002812, 1003026, 1003280, 
   1003289, 1002714, 133191, 5252218, 6007821, 1002632]

outfile = open('D:/dataset/fin_ids.csv','w')
out = csv.writer(outfile)
out.writerows(map(lambda x: [x], fin_ids))
outfile.close()

Une autre solution consisterait simplement à utiliser la méthode .to_csv() de pandas Series. Depuis que vous avez commencé avec un cadre de données, vous pouvez simplement faire:

org_city_id['org_id'].unique().to_csv("D:/dataset/fin_ids.csv", index=False)

Ces deux fichiers devraient générer un fichier csv avec les données suivantes:

1002774
0
1000702
1000339
1001620
1000710
1000202
1003143
147897
31018
1001502
1002812
1003026
1003280
1003289
1002714
133191
5252218
6007821
1002632
7
Abdou

Essaye ça:

with open('./../filename.csv', 'w') as output:
    out = csv.writer(output)
    out.writerows(map(lambda x: [x], **array_name))
0
Akshaya Natarajan