Je fais quelques simulations resp. une analyse du système en faisant varier les paramètres (dans ce cas rpm
uniquement) et en ajoutant chaque dernière ligne d'une trame de données de résultats results_df
à une trame de données récapitulative df
contenant les informations sur la bavière de mon système en fonction des différents rpm
.
Afin d'obtenir un index approprié pour le traçage et l'analyse des données, j'ai converti les valeurs variées (ici rpm
) de la liste en une série pandas ser
et concat cette série avec la trame de données récapitulative df
contenant les résultats qui m'intéressent.
Étant donné que les résultats de chaque calcul qui m'intéressent ne sont que la dernière ligne de chaque calcul, j'extrais ces données du cadre de données de résultats results_df
En utilisant .tail(1)
.
Ce que j'ai fait jusqu'à présent est illustré dans l'extrait de code suivant:
rpm = [0.25, 0.3, 0.5, 0.75, 1.0, 1.5, 2.0]
ser = pd.Series(rpm, name='rpm')
df = pd.DataFrame()
df_list = list()
for i, val in enumerate(rpm):
results_df = get_some_data_from_somwhere()
df_list.append(results_df.tail(1))
df = df.append(df_list, ignore_index=True)
df = pd.concat([df, ser], axis=1)
df.set_index('rpm', inplace=True)
with open('foo.csv', 'w') as f:
data.to_csv(f, index=True, header=True, decimal=',', sep=' ', float_format='%.3f')
Ce fichier csv que j'obtiens a le format suivant:
rpm cooling_inner heating_inner cooling_outlet heating_outlet
0.25 303,317 323,372 302,384 324,332
Cependant, je m'attendais à avoir trois chiffres décimaux et une virgule comme signe décimal dans ma colonne d'index, comme indiqué ici:
rpm cooling_inner heating_inner cooling_outlet heating_outlet
0,250 303,317 323,372 302,384 324,332
Il semble donc que les options de signe index
et decimal
ne soient pas appliquées à la colonne d'index lors de l'exportation de trames de données vers des fichiers csv à l'aide de la commande .to_csv
.
Comment pourrais-je obtenir ce comportement puisque l'option index
est définie True
et que toutes les valeurs (à l'exception de la colonne d'index) ont le bon format et le signe décimal?
Dois-je gérer la colonne d'index d'une manière ou d'une autre?
Je réécrirais vos deux lignes de fond:
with open('foo.csv', 'w') as f:
data.to_csv(f, index=True, header=True, decimal=',', sep=' ', float_format='%.3f')
Dans
data.reset_index().to_csv('foo.csv', index=False, header=True, decimal=',', sep=' ', float_format='%.3f')
C'est un peu une solution de contournement, mais comme vous l'avez remarqué, les arguments de mot clé decimal=
Et float_format=
Ne fonctionnent que sur les colonnes data, pas sur l'index.
Ce que je fais à la place, c'est de mettre l'index dans la trame de données avec reset_index
Puis je dis à to_csv(index=False
De ne pas enregistrer l'index dans le fichier (car il est maintenant dans les données).
De plus, ouvrir un flux de fichiers vous-même (with open('foo.csv', 'w') as f:
) est mieux laissé aux pandas, qui le font par eux-mêmes lorsque vous lui donnez simplement une chaîne 'foo.csv'
Comme premier argument.