Je commence à m'arracher les cheveux avec ça - j'espère donc que quelqu'un pourra vous aider. J'ai un pandas DataFrame qui a été créé à partir d'une feuille de calcul Excel en utilisant openpyxl. Le DataFrame résultant ressemble à ceci:
print image_name_data
id image_name
0 1001 1001_mar2014_report
1 1002 1002_mar2014_report
2 1003 1003_mar2014_report
[3 rows x 2 columns]
… Avec les types de données suivants:
print image_name_data.dtypes
id float64
image_name object
dtype: object
Le problème est que les numéros dans la colonne id sont, en fait, des numéros d'identification et que je dois les traiter comme des chaînes. J'ai essayé de convertir la colonne id en chaînes en utilisant:
image_name_data['id'] = image_name_data['id'].astype('str')
Cela semble un peu moche mais cela produit une variable de type 'objet' plutôt que 'float64':
print image_name_data.dyptes
id object
image_name object
dtype: object
Cependant, les chaînes créées ont un point décimal, comme indiqué:
print image_name_data
id image_name
0 1001.0 1001_mar2014_report
1 1002.0 1002_mar2014_report
2 1003.0 1003_mar2014_report
[3 rows x 2 columns]
Comment puis-je convertir une colonne float64 dans un pandas DataFrame en chaîne avec un format donné (dans ce cas, par exemple, '% 10.0f')?
Je ne parviens pas à reproduire votre problème, mais avez-vous d'abord essayé de le convertir en entier?
image_name_data['id'] = image_name_data['id'].astype(int).astype('str')
Ensuite, concernant votre question plus générale, vous pouvez utiliser map
( comme dans cette réponse ). Dans ton cas:
image_name_data['id'] = image_name_data['id'].map('{:.0f}'.format)
Si vous pouviez recharger cela, vous pourriez utiliser l'argument dtypes.
pd.read_csv(..., dtype={'COL_NAME':'str'})
Je mets cela dans une nouvelle réponse car il n'y a pas de sauts de ligne/codeblocks dans les commentaires. Je suppose que vous voulez que ces nans se transforment en une chaîne vide? Je ne pouvais pas trouver un moyen gentil de faire ceci, fais seulement la méthode laide:
s = pd.Series([1001.,1002.,None])
a = s.loc[s.isnull()].fillna('')
b = s.loc[s.notnull()].astype(int).astype(str)
result = pd.concat([a,b])