Différents types d'éléments dans DataFrame de la colonne

Considérer trois DataFrame's:

df1 = pd.DataFrame([[1,2],[4,3]])
df2 = pd.DataFrame([[1,.2],[4,3]])
df3 = pd.DataFrame([[1,'a'],[4,3]])

Ici sont les types de la deuxième colonne de la DataFrame's:

In [56]: map(type,df1[1])
Out[56]: [numpy.int64, numpy.int64]

In [57]: map(type,df2[1])
Out[57]: [numpy.float64, numpy.float64]

In [58]: map(type,df3[1])
Out[58]: [str, int]

Dans le premier cas, tous les int's sont projetées à numpy.int64. Des beaux. Dans le troisième cas, il n'y a fondamentalement pas de conversion. Cependant, dans le second cas, l'entier (3) est coulé à numpy.float64; probablement depuis l'autre nombre est un float.

Comment puis-je contrôler le casting? Dans le second cas, je veux avoir soit [float64, int64] ou [float, int] comme des types.

Solution de contournement:

À l'aide d'un callable de la fonction d'impression il y a peut être une solution de contournement, comme l'ont montré ici.

def printFloat(x):
    if np.modf(x)[0] == 0:
        return str(int(x))
    else:
        return str(x)
pd.options.display.float_format = printFloat
Joli carnet! Je pense que c'est une bonne solution et le bon usage de la float_format.
Merci! Pouvez-vous suggérer une amélioration(s) à printFloat?
Peut-être que l'utilisation de x % 1 travaille aussi à la place de np.modf, et il est plus rapide, bien que je ne pense pas que la vitesse sera un problème (elle sont toujours un nombre limité d'éléments qui sont imprimés).

OriginalL'auteur Dror | 2014-12-08