Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521

Pandas, dataframe, to_csv, csvformatter

17.09.2019, 08:19. Показов 8392. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите, пожалуйста.

Делаю экспорт таблицы с помощью класса CSVFormatter в файл csv. Хочу, чтобы везде было по 3 знака после запятой. За знаки после запятой отвечает параметр float_format. Если оставить этот параметр по умолчанию, во всех столбцах получится разное количество знаков. Задаю разные значения этого параметра '%.3f', '%.15f' и тд. На выходной файл вообще не влияет. Результат как при значении по умолчанию. Проверила везде внутри, значение передаётся нормально, как задавала. В чем может быть проблема?

Добавлено через 14 минут
И вообще в этот float_format любую строку можно передать, любой бессмысленный набор символов, и он везде передастся, нигде не вылетит, и результирующий файл будет как по умолчанию.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2019, 08:19
Ответы с готовыми решениями:

Pandas dataframe
Доброго дня форумчане. Возник следующий вопрос. Есть у меня таблица, которую необходимо "перевернуть". Так dataframe...

Dataframe pandas
Всем привет! Есть dataframe книги. Автор1 книга 1 Автор 2 книга 2 Автор 1 книга 3 Как можно сформировать xml файл с...

Pandas Dataframe
я импортирую фрейм данных из excel. Столбец 1 установлен как индекс. Я хочу проверить в индекс (Столбец 1) пустой ячейке с помощью цикла...

33
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 08:36
Simply me, документация хранит молчание по этому поводу?

покажи код, чтобы понимать как именно и с чем ты это делаешь (импорты не забудь оставить в примере)
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 11:16  [ТС]
Вот из документации. Вроде всё правильно понимаю.

DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=None, date_format=None, doublequote=True, escapechar=None, decimal='.')[source]
Write DataFrame to a comma-separated values (csv) file

Parameters:
path_or_buf : string or file handle, default None

File path or object, if None is provided the result is returned as a string.

sep : character, default ‘,’

Field delimiter for the output file.

na_rep : string, default ‘’

Missing data representation

float_format : string, default None

Format string for floating point numbers

...
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 11:32
Simply me,
Python
1
2
3
4
5
6
>>> df
        name    mask     weapon
0    Raphael     red    12.456734
1  Donatello  purple  13.235124
>>> df.to_csv(index=False, float_format='%.2f')
'name,mask,weapon\nRaphael,red,12.46\nDonatello,purple,13.24\n'
Как говорил Линус - "хорош говорить -код показывайте!")
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 12:27  [ТС]
Вот я думаю, как показать) немного проблемно. Рабочий комп. Интернета нет. Флешки, телефоны не видит. В общем, есть 2 файла. frame.py и csvs.py. Я их не редактировала. Когда их редактирую, появляется предупреждение, что они не принадлежат проекту. По-моему, эти файлы из интернета.

В файле csvs.py описан класс CSVFormatter. Этот класс вроде видела в интернете. У его конструктора такие же параметры, как у функции to_csv.

В файле frame.py описывается класс DataFrame и в том числе его функция to_csv. В ней импортируется CSVFormatter и в конце такой код:
Python
1
2
formatter=CSVFormatter(self, path_or_buf, ...)
formatter.save()
В файле, который я редактирую, из имеющего отношение к делу, такой код:
Python
1
2
3
4
5
6
7
8
...
from pandas import DataFrame
...
class BW(QtGui.QMainWindow):
    ...
    def write_data_to_file(self, filename, data):
        df = DataFrame(data)
        df.to_csv(file_name, float_format = 'qweertyuiop', encoding = 'utf-8-sig', header = False, index = False, decimal = ",", index_label = False, sep = ";")
Добавлено через 9 минут
Еще в классе BW есть функция export_image_csv(self), в которой есть вызов:
Python
1
 self.write_data_to_file(csv_file_name, res)
Еще в одном файле есть класс BM. У него есть такая функция:
Python
1
2
def _on_csv_export_image_triggered(self):
                     self._widget().export_image_csv()
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 12:29
Simply me, теперь я полностью запутался...


Цитата Сообщение от Simply me Посмотреть сообщение
В файле, который я редактирую, из имеющего отношение к делу, такой код:
но из того что ты привела выходит что используется ДатаФрейм от пандас, тут не вижу никакого ЦСВФорматтера и других фреймов, однако вот как у тебя в коде сделать с пандас нельзя
Python
1
2
3
4
5
>>> df.to_csv(index=False,float_format='werf')
...
...
    float_format = lambda value: self.float_format % value
TypeError: not all arguments converted during string formatting
Цитата Сообщение от Simply me Посмотреть сообщение
У его конструктора такие же параметры, как у функции to_csv.
это не означает что он их все верно использует, так как я привел тебе код выше, а ты писала, что
Цитата Сообщение от Simply me Посмотреть сообщение
вообще в этот float_format любую строку можно передать, любой бессмысленный набор символов
без полного кода не могу ничего посоветовать и точно сказать
для начала проверь точно ли у тебя используется свой самописный ДатаФрейм или родной пандовский
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 12:43  [ТС]
Закомментировала импорт пандовского датафрейма. Вылетело в строчке df = DataFrame(data). Может, перегрузили его функцию to_csv. Ну хотя нет. Вроде видела ее код в интернете. Такой же. В функции to_csv импортируют CSVFormatter из пандаса (from pandas.io.formats.csvs import CSVFormatter)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 12:49
del

Добавлено через 2 минуты
Simply me, пока не знаю, код большой, секретный, сможешь его показать? версии питона и пандас свежие?
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 12:57  [ТС]
К сожалению, большой и секретный. Даже если бы рискнула показать, могла бы только набирать с телефона. На компе интернета нет. В файле, где описывается класс BW 6000 строк. И тут много файлов. Ну я стараюсь здесь самое относящееся к делу показывать. Версии свежие вроде.
Еще у этой функции to_csv есть параметр quoting. Из документации:

quoting : optional constant from csv module
Defaults to csv.QUOTE_MINIMAL. If you have set a float_format then floats are converted to strings and thus csv.QUOTE_NONNUMERIC will treat them as non-numeric.

Может, компилятору кажется, что в моих данных нет float?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 13:05
Цитата Сообщение от Simply me Посмотреть сообщение
Может, компилятору кажется, что в моих данных нет float?
да, это вариант, они там у тебя не текстом ли считаются?

Добавлено через 1 минуту
да, если флоат превратить в строки то тогда работает именно как ты описала: в флоат формат можно писать что угодно!

Добавлено через 34 секунды
есть пример файла, дата фрейма? или сама там посмотри в дебаггере, похоже это строковые поля
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 13:14  [ТС]
Ну вот если чисто визуально по-человечески, то это числа. А как их видит компилятор, пока не могу проверить. Может, правда, связано со значением quoting. У меня по умолчанию: csv.QUOTE_MINIMAL.

Еще мне такую ссылку скинули: https://github.com/pandas-dev/pandas/issues/11553

У меня не совсем свободный английский, тут о том, что float_format иногда игнорируется. Но не совсем поняла, в каких случаях.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 13:27
Simply me, так ты не визуально, а у самой панды спроси - это флоат?
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> df = pd.DataFrame({'a': [0, 1.1], 'b': ['2.2', '3.3']})
>>> df
     a    b
0  0.0  2.2
1  1.1  3.3
>>> df.a
0    0.0
1    1.1
Name: a, dtype: float64
>>> df.b
0    2.2
1    3.3
Name: b, dtype: object
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 13:41  [ТС]
Ну по крайней мере, там, где данные передаются в конструктор DataFrame, у которого потом вызывается, to_csv, они еще float.

Как-то параметр quoting влияет, мне кажется.
Миниатюры
Pandas, dataframe, to_csv, csvformatter  
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 13:48
Simply me, уже даже не знаю... ты же в пайчарме? если нажать Ctrl и кликнуть на to_csv то провалишься в пандовский датафрейм? или?
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 14:00  [ТС]
Точно не знаю. Но, наверное, пандовский.

Я сейчас подставила все 4 варианта значения quoting. А float_format поставила "%.3f". Ни один вариант не подошёл.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 14:01
Цитата Сообщение от Simply me Посмотреть сообщение
Точно не знаю. Но, наверное, пандовский.
ну если ты туда провалилась то смотри докстринги вверху что это за модуль, в твоих папках он лежит или в сайт-пекиджах у панды.
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 14:06  [ТС]
Ну в этом файле когда я редактирую, пишет предупреждение, что этот файл не относится к проекту. Наверное, всё-таки пандовский. Я тут первый день просто.
Миниатюры
Pandas, dataframe, to_csv, csvformatter  
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 14:15
Simply me, какие версии питона и панды?
а точно не так сохраняет как надо, ты тот что нужно файл смотришь? Может забываешь его закрыть?
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
17.09.2019, 14:19  [ТС]
Версия питона 3.6.3. Панды - не знаю.

Да, тот файл. И на него не влияет всё, что я меняю в параметре float_format.
Миниатюры
Pandas, dataframe, to_csv, csvformatter  
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,687
Записей в блоге: 29
17.09.2019, 14:31
Simply me, кажется придумал! смотри пример и дальше описание
Python
1
2
3
4
5
6
>>> df = pd.DataFrame({'a':[1.234,2.3345],'b':[3.44566,3.4566464]})
>>> df.to_csv(float_format='%.2f')
',a,b\n0,1.23,3.45\n1,2.33,3.46\n'
>>> df = pd.DataFrame({'a':[1.234,2.3345],'b':[3.44566,'3.4566464']})
>>> df.to_csv(float_format='%.2f')
',a,b\n0,1.23,3.44566\n1,2.33,3.4566464\n'
видишь во втором случае формат не помог - потому что ОДНО из значений не флоат (смотри на апострофы), то есть да ты в дебаггере посмотрела что вроде флоты идут, но если хоть один в ряду не флоат а строка- каюк форматированию. Поставь условие или проверь, отфильтруй -нет ли у тебя там строковых значений в столбиках!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2019, 14:31
Помогаю со студенческими работами здесь

Выборка в DataFrame Pandas
Подскажите пожалуйста с задачей, не выходит сделать выборку, как в задании в DataFrame Pandas. 1.Оставьте в выборке только те...

Pandas. Объединить DataFrame
Приветствую всех! Коллеги, подскажите. Я спарсил xml файл с помощью xmltodict. Получил два датафрейма (пришлось делать два из-за...

Столбец с условием в pandas dataframe
Всем привет, есть dataframe, необходимо добавить столбец d, который бы вычислялся на основе условий содержимого столбцов a,b,c. import...

Сравнение Dataframe через Pandas
Добрый вечер уважаемые форумчане! На данный момент нахожусь на начальном этапе обучения языка Python 3 версии. Мне необходимо...

Сложные структуры Pandas DATAFRAME
Здраствуйте уважаемые знатоки! Подскажите пожалуйста способ при котором можно обработать нижеследующую структуру. Общий смысл просто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru