Toutes nos excuses si cette fonctionnalité a déjà été suggérée. De nombreuses fonctions d'E/S (par exemple read_csv
) permettent de spécifier facilement le format de chaque colonne à l'aide d'un dictionnaire. Pour autant que je sache, ce n'est pas
possible avec la construction de base de données régulière, par exemple :
df = pd.DataFrame(data=data, columns=columns, dtypes={'colname1': str, 'colname2': np.int})
Mieux encore , ce serait formidable si l'on pouvait changer le dtypes
pour les colonnes de la base de données en utilisant une construction similaire, par exemple :
df.change_types({'colname1': str, 'colname2': np.int})
Est-ce que quelque chose comme ça est déjà prévu ?
voir #9133 et #4464 ce n'est pas si difficile
envie d'essayer ?
Cette façon fonctionne réellement:
data_df = data_df.astype( dtype= {"wheel_number":"int64", "car_name":"object","minutes_spent":"float64"})
Une différence entre read_csv( csvFile, dtype={..} )
et df.astpye(dtype={..} )
:
Dans le cas de read_csv, ce n'est pas grave si le dict fourni contient plus de colonnes qui ne sont pas dans le csv, elles sont ignorées gracieusement. Dans le cas de astype()
, il génère une erreur si toutes les colonnes définies ne sont pas présentes dans les données.
Cela devrait ressembler davantage à read_csv. Parce que nous pouvons avoir des dicts entrants qui peuvent avoir certaines colonnes et pas d'autres. En ce moment, voici la solution de contournement que je dois faire:
df = pd.DataFrame( incoming_data )
gtfs_dtypes = { ... } # my master dtypes dict, having all possible column names
gtfs_dtypes_specific = { x:gtfs_dtypes.get(x,'str') for x in df.columns.tolist() }
df = df.astype(dtype=gtfs_dtypes_specific)
Commentaire le plus utile
Cette façon fonctionne réellement:
data_df = data_df.astype( dtype= {"wheel_number":"int64", "car_name":"object","minutes_spent":"float64"})