J'ai un dataframe qui a une colonne appelée «CBG» avec des nombres comme valeur de chaîne.
combine_acs_merge.to_csv(new_out_csv, sep=',') >>> CBG: [0: 10010221101, ...]
Lorsque je l'écris dans un fichier csv, les 'O' de début sont supprimés:
CBG acs_total_persons acs_total_housing_units 0 010010211001 1925 1013 1 010030114011 2668 1303 2 010070100043 930 532
C'est déjà une chaîne; comment puis-je empêcher la suppression du zéro de début dans le fichier .csv
3 Réponses :
Les pandas ne suppriment pas les zéros remplis. Vous aimez voir cela lors de l'ouverture dans Excel. Ouvrez le csv dans un éditeur de texte comme notepad ++ et vous verrez qu'ils sont toujours remplis de zéro.
Prenons un exemple:
$ cat CBG.csv ,CBG,acs_total_housing_units,acs_total_persons 0,010010211001,1013,1925 1,010030114011,1303,2668 2,010070100043,532,930
Considérant le num comme un int que vous pouvez convertir en str().
>>> df = pd.DataFrame({'CBG': ["010010211001", "010030114011", "010070100043"],
... 'acs_total_persons': [1925, 2668, 930],
... 'acs_total_housing_units': [1013, 1303, 532]})
>>>
>>> df
CBG acs_total_housing_units acs_total_persons
0 010010211001 1013 1925
1 010030114011 1303 2668
2 010070100043 532 930
>>> df.to_csv("CBG.csv")
Sortie:
Vous trouverez les zéros non significatifs sont intacts.
pd.read_csv('test.csv', dtype=str)
OU, si vous lisez d'abord les données de csv, utilisez ensuite belwo ..
,col1,num 0,One,011 1,two,0123 2,three,0122 3,four,0333
Cependant, si votre colonne CBG déjà str alors elle devrait être simple ..
>>> df["num"] = df["num"].astype(str)
>>> df.to_csv("datasheet.csv")
résultat:
>>> df
col1 num
0 One 011
1 two 0123
2 three 0122
3 four 0333
Lors de la lecture d'un fichier CSV, pandas essaie de convertir les valeurs de chaque colonne en un type de données comme bon lui semble. S'il voit une colonne qui ne contient que des chiffres, il définira le dtype de cette colonne sur int64. Cela convertit "010010211001" en 10010211001.
Si vous ne voulez pas que des conversions de type de données se produisent, spécifiez dtype = str lors de la lecture dans le fichier CSV. Selon la documentation pandas pour read_csv https: // pandas. pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html :
dtype : Type name or dict of column -> type, optional
Data type for data or columns. E.g. {âaâ: np.float64, âbâ: np.int32, âcâ: âInt64â} Use str or object
together with suitable na_values settings to preserve and not interpret dtype. If
converters are specified, they will be applied INSTEAD of dtype conversion.
Les pandas le suppriment-ils? Ou l'ouvrez-vous dans Excel et est-ce qu'Excel l'interprète comme un nombre et supprime le zéro non significatif?
Essayez de l'écrire dans un fichier .txt: combine_acs_merge.to_csv (testFile.txt, sep = ',', mode = 'a') et voyez si les zéros sont toujours là. Erfan a probablement raison de supposer qu'Excel supprime le zéro lorsque vous ouvrez le fichier.