pandas в CSV аргументы float format и decimal не работают для столбца индекса
фон
Я делаю некоторые моделирования resp. системный анализ путем изменения параметров (в данном случае rpm
только) и добавьте каждую последнюю строку фрейма данных результатов results_df
в сводную таблицу данных df
, содержащий предоставление baviour моей системы в depencence разнообразного rpm
.
чтобы получить соответствующий индекс для построения графика и анализа данных, я преобразовал различные значения (здесь rpm
) из списка в серию панд ser
и объедините эту серию с суммирующим dataframe df
содержащий результаты, которые меня интересуют.
поскольку результаты каждого вычисления, которые меня интересуют, - это только последняя строка каждого вычисления, я извлекаю эти данные из фрейма данных результатов results_df
С помощью .tail(1)
.
то, что я сделал, как показано в следующем фрагменте:
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')
этот csv-файл, который я получаю, имеет следующее формат:
rpm cooling_inner heating_inner cooling_outlet heating_outlet
0.25 303,317 323,372 302,384 324,332
тем не менее, я ожидал иметь три десятичные цифры и запятую в качестве десятичного знака в моем столбце индекса, как показано здесь:
rpm cooling_inner heating_inner cooling_outlet heating_outlet
0,250 303,317 323,372 302,384 324,332
так кажется, что index
и decimal
параметры знака не применяются к столбцу индекса при экспорте фреймов данных в csv-файлы с помощью .
как я мог добиться такого поведения, так как установлен True
и все значения (за исключением столбца индекса) имеют правильный формат и десятичный знак?
должен ли я обрабатывать столбец индекса как-то отдельно?
1 ответов
Я бы переписал ваши две нижние строки:
with open('foo.csv', 'w') as f:
data.to_csv(f, index=True, header=True, decimal=',', sep=' ', float_format='%.3f')
на
data.reset_index().to_csv('foo.csv', index=False, header=True, decimal=',', sep=' ', float_format='%.3f')
это немного обходной путь, но, как вы заметили, аргументы ключевого слова decimal=
и float_format=
работать только на сведения столбцы, не в индексе.
вместо этого я помещаю индекс в фрейм данных с помощью reset_index
а потом я говорю to_csv(index=False
не сохранять индекс в файл (так как он теперь находится в данных).
кроме того, открытие файлового потока себя (with open('foo.csv', 'w') as f:
) лучше оставить панд, которые делают это сами по себе, когда вы просто даете ему строку 'foo.csv'
в качестве первого аргумента.