Je veux apporter des données dans un DataFrame pandas et je veux assigner des types pour chaque colonne lors de l'importation. Je veux pouvoir le faire pour des jeux de données plus volumineux comportant de nombreuses colonnes différentes, mais à titre d'exemple:
myarray = np.random.randint(0,5,size=(2,2))
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype=[float,int])
mydf.dtypes
résulte en:
TypeError: type de données non compris
J'ai essayé quelques autres méthodes telles que:
mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': int})
TypeError: l'objet de type 'type' n'a pas de len ()
Si je mets dtype=(float,int)
, un format flottant est appliqué aux deux colonnes.
En fin de compte, je voudrais simplement pouvoir lui transmettre une liste de types de données de la même manière que je peux lui transmettre une liste de noms de colonnes.
Je viens d’être confronté à cela, et le problème des pandas est toujours ouvert, alors je publie ma solution de contournement. En supposant que df
est mon DataFrame et dtype
est un dict mappant les noms de colonne sur les types:
for k, v in dtype.items():
df[k] = df[k].astype(v)
(note: utilisez dtype.iteritems()
en python 2)
Pour la référence:
dtypes
): https://docs.scipy.org/doc/numpy-1.12.0/reference/arrays.dtypes.htmlcategory
: http://pandas.pydata.org/pandas-docs/stable/categorical.htmlVous voudrez peut-être essayer de passer un dictionnaire d'objets Series
au constructeur DataFrame
- cela vous donnera un contrôle beaucoup plus spécifique sur la création et devrait, espérons-le, être plus clair. Une version de modèle (data1
peut être un tableau, etc.):
df = pd.DataFrame({'column1':pd.Series(data1, dtype='type1'),
'column2':pd.Series(data2, dtype='type2')})
Et exemple avec des données:
df = pd.DataFrame({'A':pd.Series([1,2,3], dtype='int'),
'B':pd.Series([7,8,9], dtype='float')})
print (df)
A B
0 1 7.0
1 2 8.0
2 3 9.0
print (df.dtypes)
A int32
B float64
dtype: object