les pandas distinction entre str et les types d'objets
Numpy semble faire une distinction entre str
et object
types. Par exemple je peux le faire ::
>>> import pandas as pd
>>> import numpy as np
>>> np.dtype(str)
dtype('S')
>>> np.dtype(object)
dtype('O')
Où dtype('S') et dtype('O') correspond à str
et object
respectivement.
Cependant pandas semblent absence de cette distinction et de contraindre str
à object
. ::
>>> df = pd.DataFrame({'a': np.arange(5)})
>>> df.a.dtype
dtype('int64')
>>> df.a.astype(str).dtype
dtype('O')
>>> df.a.astype(object).dtype
dtype('O')
Forcer le type à dtype('S')
n'aide pas non plus. ::
>>> df.a.astype(np.dtype(str)).dtype
dtype('O')
>>> df.a.astype(np.dtype('S')).dtype
dtype('O')
Est il une explication à ce comportement?
Comme une très brève explication qui n'est pas une réponse: Si vous utilisez une chaîne dtype dans
Cela peut répondre à votre question - stackoverflow.com/questions/21018654/... - fondamentalement, ils stockent objet ndarray, pas de chaînes dans ndarray. Cependant, je ne l'appui qu'ils auraient pu être plus clair quand il s'agit de distinguer les types - par exemple, avoir une capacité à distinguer 'str' de 'mixte' colonnes qui sont également déclarés comme "O".
numpy
, c'est fondamentalement une largeur fixe c-comme chaîne de caractères. Dans pandas
, ils sont "normaux" python chaînes, ainsi que le type d'objet.Cela peut répondre à votre question - stackoverflow.com/questions/21018654/... - fondamentalement, ils stockent objet ndarray, pas de chaînes dans ndarray. Cependant, je ne l'appui qu'ils auraient pu être plus clair quand il s'agit de distinguer les types - par exemple, avoir une capacité à distinguer 'str' de 'mixte' colonnes qui sont également déclarés comme "O".
OriginalL'auteur Meitham | 2016-01-19
Vous devez vous connecter pour publier un commentaire.
Numpy la chaîne dtypes ne sont pas python chaînes.
Par conséquent,
pandas
utilise délibérément natif python chaînes, qui nécessitent un objet dtype.Tout d'abord, laissez-moi vous montrer un peu de ce que je veux dire par numpy de chaînes différentes:
Maintenant, 'x' est un
numpy
chaîne dtype (largeur fixe, c-comme string) ety
est un tableau de native python chaînes.Si nous essayons d'aller au-delà de 7 caractères, nous allons voir une différence immédiate. La chaîne dtype versions seront tronqués:
Tandis que l'objet dtype versions peuvent être arbitraire longueur:
Prochain, le
|S
dtype les chaînes ne peuvent pas tenir unicode correctement, mais il ya une unicode chaîne de longueur fixe dtype, ainsi. Je vais sauter un exemple, pour le moment.Enfin, numpy de cordes ne sont mutables, tandis que le Python chaînes ne sont pas. Par exemple:
Pour toutes ces raisons,
pandas
a choisi de ne jamais permettre à C, les chaînes de longueur fixe comme un type de données. Comme vous l'avez remarqué, en tentant de forcer un python de chaîne en fixe avec numpy chaîne ne fonctionne pas danspandas
. Au lieu de cela, il utilise toujours le natif python chaînes, qui se comportent d'une manière plus intuitive pour la plupart des utilisateurs.pd.Series(['a', 'b', 'c'], dtype='S1')
Les Pandas vont accepter cette déclaration comme valables, mais la dtype sera changé de " S1 " à " O " (objet).
Il était possible, peut-être plus.
OriginalL'auteur Joe Kington