web-dev-qa-db-fra.com

Python Pandas read_Excel dtype str remplacer nan par blank ('') lors de la lecture ou lors de l'écriture via to_csv

Version Python: Python 2.7.13 :: Anaconda personnalisé (64 bits) Pandas version: pandas 0.20.2

Bonjour,

J'ai une exigence assez simple. Je voudrais lire un fichier Excel et écrire une feuille spécifique dans un fichier csv. Les valeurs vides dans le fichier Excel source doivent être traitées/écrites comme vides lors de l'écriture du fichier csv. Cependant, mes enregistrements vierges sont toujours écrits en tant que "nan" dans le fichier de sortie. (sans les guillemets)

Je lis le fichier Excel via la méthode

read_Excel (xlsx, sheetname = 'sheet1', dtype = str)

Je spécifie dtype parce que j'ai des colonnes qui sont des nombres mais qui doivent être traitées comme des chaînes. (Sinon, ils pourraient perdre des 0 en tête, etc.), c'est-à-dire que je voudrais lire la valeur exacte de chaque cellule.

J'écris maintenant le fichier .csv de sortie via to_csv (fichier_sortie, index = False, mode = 'wb', sep = ',', encoding = 'utf-8')

Cependant, mon fichier csv résultant contient nan pour toutes les cellules vides du fichier Excel.

Qu'est-ce que je rate? J'ai déjà essayé la fonction .fillna ('', inplace = True) mais cela ne semble rien faire de mes données. J'ai également essayé d'ajouter le paramètre na_rep = '' à la méthode to_csv mais sans succès.

Merci pour toute aide!

Addendum: Veuillez trouver ci-dessous un exemple reproductible.

Veuillez trouver ci-après un exemple de code reproductible. Veuillez d'abord créer un nouveau fichier Excel avec 2 colonnes avec le contenu suivant: COLUMNA COLUMNB COLUMNC 01 test 02 test
03 test

(J'ai enregistré ce fichier Excel dans c:\test.xls Veuillez noter que la 1ère et la 3ème ligne de la colonne B ainsi que la 2ème ligne de la colonne C sont vides/vides)

Maintenant, voici mon code:

import pandas as pd
xlsx = pd.ExcelFile('c:\\test.xlsx')
df = pd.read_Excel(xlsx, sheetname='Sheet1', dtype = str)
df.fillna('', inplace=True)
df.to_csv('c:\\test.csv', index=False,mode='wb',sep=',',encoding='utf-8', na_rep ='')

Mon résultat est:
COLUMNA, COLUMNB, COLUMNC
01, nan, test
02, test, nan
03, nan, test

Mon résultat souhaité serait:
COLUMNA, COLUMNB, COLUMNC
01, test
02, test,
03, test

9
panda

Puisque vous avez affaire à des chaînes nan, vous pouvez utiliser la fonction replace :

df = pd.DataFrame({'Col1' : ['nan', 'foo', 'bar', 'baz', 'nan', 'test']})
df.replace('nan', '')

   Col1
0      
1   foo
2   bar
3   baz
4      
5  test

Tout 'nan' les valeurs de chaîne seront remplacées par la chaîne vide ''. replace n'est pas en place, alors assurez-vous de le réattribuer:

df = df.replace('nan', '')

Vous pouvez ensuite l'écrire dans votre fichier à l'aide de to_csv.


Si vous cherchez à remplir des valeurs NaN avec du blanc, utilisez fillna:

df = df.fillna('')    
10
cs95