J'ai travaillé avec des données importées d'un CSV. Les pandas ont changé certaines colonnes pour qu'elles flottent, alors maintenant les nombres dans ces colonnes s'affichent en virgule flottante! Cependant, j'ai besoin qu'ils soient affichés sous forme d'entiers ou sans virgule. Existe-t-il un moyen de les convertir en entiers ou de ne pas afficher la virgule?
230
df.col = df.col.astype(int)
df = df.astype(int)
Réponses:
Pour modifier la sortie flottante, procédez comme suit:
la source
df.a = df.a.astype(float)
? Cela fait-il une copie (vous ne savez pas comment lecopy
paramètreastype()
est utilisé)? Quoi qu'il en soit pour mettre à jour le type "en place"?DF.({'200': {'#': 354, '%': 0.9971830985915493}, '302': {'#': 1, '%': 0.0028169014084507044}})
noter que le # est converti en float et ce sont des lignes, pas des colonnes. parce que chacun est unSeries
qui ne peut stocker qu'un seul type uniforme?dtype
? Si c'est le cas,dtype
vous devez créer ces colonnes dedtype
object
manière à ce qu'elles soient mélangées, sinon mon conseil serait d'utiliser simplement float et lors des comparaisons, utiliseznp.isclose
Utilisez la
pandas.DataFrame.astype(<type>)
fonction pour manipuler les types de colonne.ÉDITER:
Pour gérer les valeurs manquantes:
la source
Compte tenu de la trame de données suivante:
À l'aide d'une liste de noms de colonnes, modifiez le type de plusieurs colonnes avec
applymap()
:Ou pour une seule colonne avec
apply()
:la source
ValueError: ('cannot convert float NaN to integer', u'occurred at index <column_name>')
df['C'] = df['C'].dropna().apply(np.int64)
C'est une solution rapide au cas où vous voudriez convertir plus de colonnes de votre
pandas.DataFrame
float en entier en considérant également le cas où vous pouvez avoir des valeurs NaN.J'ai essayé avec
else x)
etelse None)
, mais le résultat a toujours le nombre flottant, donc je l'ai utiliséelse ""
.la source
""
à toutes les valeurs danscol
En développant @Ryan G mentionné l'utilisation de la
pandas.DataFrame.astype(<type>)
méthode, on peut utiliser l'errors=ignore
argument pour convertir uniquement les colonnes qui ne produisent pas d'erreur, ce qui simplifie notamment la syntaxe. De toute évidence, la prudence doit être appliquée lors de l'ignorance des erreurs, mais pour cette tâche, il est très pratique.À partir des documents pandas.DataFrame.astype :
la source
la source
Pour convertir toutes les colonnes flottantes en int
la source
Voici une fonction simple qui descendra les flottants dans le plus petit type entier possible qui ne perdra aucune information. Pour des exemples,
100,0 peut être converti de float en entier, mais 99,9 ne peut pas (sans perdre les informations à l'arrondi ou à la troncature)
De plus, 1.0 peut être abaissé jusqu'à la
int8
perte d'informations, mais le plus petit type entier pour 100_000.0 estint32
Exemples de code:
la source
Les colonnes qui doivent être converties en int peuvent être mentionnées dans un dictionnaire également comme ci-dessous
la source
la source
astype(int)
a déjà été mentionné à plusieurs reprises. Cette réponse n'ajoute rien de nouveau.