pandas: float_format и десятичный знак не работают должным образом

Я пытаюсь записать pandas DataFrame df в CSV-файл, используя pandas 'to_csv со следующей строкой:

df.to_csv(f, index=False, header=False, decimal=',', sep=' ', float_format='%.3f')

Что дает csv-файл, подобный следующему:

295.998 292.500 293.000 293.000
295.998 292.500 293.000 293.000
295.998 292.500 293.000 293.000

Таким образом, вариант float_format работает очень хорошо, так как все числа состоят из трех десятичных цифр. Однако вариант decimal (decimal = ','), похоже, не работает, так как десятичный знак — это точка, а не запятая.

Меня интересует что-то вроде следующего:

295,998 292,500 293,000 293,000
295,998 292,500 293,000 293,000
295,998 292,500 293,000 293,000

Как я могу убедить панд использовать три десятичные цифры и нужную запятую в качестве десятичного знака?


person albert    schedule 21.07.2015    source источник
comment
Какая у вас версия панд?   -  person Vlad Mironov    schedule 21.07.2015
comment
Какую версию панды вы используете? это отлично работает в 0.16.2   -  person EdChum    schedule 21.07.2015
comment
Моя версия 0.15.2 (выход pd.__version__)   -  person albert    schedule 21.07.2015
comment
Можешь попробовать обновиться, возможно это баг твоей версии   -  person EdChum    schedule 21.07.2015
comment
@EdChum: Как я могу сделать это, используя pip (python3) в Mac OS?   -  person albert    schedule 21.07.2015
comment
Я так думаю, но у меня нет Mac, поэтому не могу сказать наверняка, но я думаю, что это решит вашу проблему.   -  person EdChum    schedule 21.07.2015
comment
После обновления панд (sudo pip3 install -U pandas) все работает как часы.   -  person albert    schedule 21.07.2015
comment
Пожалуйста, опубликуйте как ответ и примите его через 2 дня, чтобы этот пост не остался без ответа.   -  person EdChum    schedule 21.07.2015


Ответы (2)


У меня была такая же проблема с запуском панд версии «0.17.1». Я обнаружил, что заранее не указал dtype DataFrame, и он оказался в виде объекта типа (df.dtypes). Кадры данных объектов типа, похоже, не преобразуются правильно, как показано в следующем минимальном примере:

df_object = pd.DataFrame({'a': [1.1, 1.2, 1.3], 'b':[2.1, 2.2, 2.3],}, dtype=object)
df_object.to_csv(decimal=',')

',a,b\n0,1.1,2.1\n1,1.2,2.2\n2,1.3,2.3\n'

df_float = pd.DataFrame({'a': [1.1, 1.2, 1.3], 'b':[2.1, 2.2, 2.3],}, dtype=float)
df_float.to_csv(decimal=',')

',a,b\n0,"1,1","2,1"\n1,"1,2","2,2"\n2,"1,3","2,3"\n'

person gebbissimo    schedule 05.03.2018

Такое поведение, вероятно, является ошибкой в ​​версии pandas 0.15.2, поскольку оно отлично работает после обновления до версии 0.16.2 с помощью следующей команды:

sudo pip3 install -U pandas

Что может быть проверено

import pandas as pd
pd.__version__

Предоставление

'0.16.2'

С помощью команд, указанных в вопросе, результирующий CSV-файл выглядит так, как хотелось бы:

295,998 292,500 293,000 293,000
295,998 292,500 293,000 293,000
295,998 292,500 293,000 293,000
person albert    schedule 21.07.2015
comment
Просто примечание: это не была ошибка, но опция decimal была введена только для to_csv в pandas 0.16 (то, что она не вызывала неизвестный аргумент, прежде чем можно было рассматривать как ошибку .. :-)) - person joris; 22.07.2015