Pandas: Création de dataframe : Spécification des types avec un dictionnaire

Créé le 18 janv. 2015  ·  3Commentaires  ·  Source: pandas-dev/pandas

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 ?

API Design Dtypes Duplicate Reshaping

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"})

Tous les 3 commentaires

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)
Cette page vous a été utile?
0 / 5 - 0 notes