10
votes

Pandas: Pourquoi le type de colonne par défaut est-il pour le flotteur numérique?

J'utilise des pandas 0.18.1 avec Python 2.7.x. J'ai un Dataframe vide que j'ai lu en premier. Je vois que les types de ces colonnes sont objet qui est ok. Lorsque j'affecte une ligne de données, le type de valeurs numériques passe à float64 . Je m'attendais à int ou int64 . Pourquoi cela arrive-t-il?

Y a-t-il un moyen de définir une option globale pour laisser pandas sait que pour les valeurs numériques, traitez-les par défaut comme int sauf si les données ont un . ? Par exemple, [0 1.0, 2.] , première colonne est int mais les deux autres sont float64 ?

pour Exemple: xxx


0 commentaires

3 Réponses :


3
votes

La pourquoi est presque certainement à voir avec la flexibilité et la vitesse. Juste parce que Pandas n'a vu qu'un entier dans cette colonne jusqu'à présent ne signifie pas que vous n'essayez pas d'ajouter un flotteur plus tard, ce qui nécessiterait des pandas de revenir en arrière et de changer le type pour toute cette colonne. Un flotteur est le type numérique le plus robuste / flexible.

Il n'y a pas de moyen global de remplacer ce comportement (dont je suis au courant), mais vous pouvez utiliser la méthode astype pour modifier un fichier de données individuel.

http://pandas.pydata.org/ Pandas-Docs / Stable / généré / Pandas.Dataframe.AsType.html


0 commentaires

3
votes

Si vous lisez un fichier de données vide, vous pouvez lancer explicitement les types pour chaque colonne après la lecture. xxx

Si vous ne connaissez pas les noms de colonne de votre fichier de données vide, vous pouvez attribuer tout le tout en tant que int , puis laissez pandas le trier. xxx


0 commentaires

8
votes

Il n'est pas possible pour les pandas de stocker des valeurs nan dans les colonnes entier.

Ceci fait float le choix par défaut évident pour le stockage des données, car dès que la valeur manquante résulte des pandas devraient changer le type de données de la colonne entière. Et les valeurs manquantes se présentent très souvent dans la pratique.

comme pour pourquoi c'est-à-dire, c'est une restriction héritée de NUMPY. Fondamentalement, les pandas doivent mettre de côté un motif de bits en particulier pour représenter nan . Ceci est simple pour les nombres de points flottants et il est défini dans la norme IEEE 754. Il est plus gênant et moins efficace de le faire pour un entier de largeur fixe.

mise à jour

Nouvelles passionnantes dans Pandas 0.24. Integerarray est une fonctionnalité expérimentale mais pourrait rendre ma réponse originale obsolète. Donc, si vous lisez cela sur ou après le 27 févr. 2019, consultez le docs pour cette fonctionnalité.


0 commentaires