Pandas dataframe.read_csv с запятой в столбце читается неправильно

Я пытаюсь прочитать файл csv со следующими значениями [23, " 5,000.00 ", A]

Мне нужно прочитать число с запятой, но я не могу этого сделать, даже если передам десятичную дробь и кавычки.

Я читаю CSV, который df.read_csv(path, delimiter=',', quotechar='"', decimal=',', thousands='.', dtype=str)

Я получаю следующий вывод, если я запускаю df.values.tolist() => ['23', ' " 5', '000.00 "', 'A']

В чем может быть проблема?

Столбец с данным типом всегда разный. Поэтому я не могу преобразовать его на основе имени столбца. dtype=str следует оставить в виде строки, так как это необходимо на будущее.

Вы открываете этот CSV в Excel?

BigBen 17.03.2022 17:09

@BigBen После записи в CSV я открываю его в текстовом редакторе или Excel. Выход такой же

Stacy 17.03.2022 17:16

Попробуйте указать параметры quotechar и decimal для df.read_csv: dataframe.to_csv(buffer, delimiter = ",", quotechar='"', decimal = ",", encoding = "utf-8", index=False)

ibmx 17.03.2022 17:21

@ibmx Только что проверил. Это не сработало. Все тот же вывод

Stacy 17.03.2022 17:40

Вы также можете попробовать изменить разделитель на что-то другое, например "|" или ";".

ibmx 17.03.2022 18:19

Я заметил, что, вероятно, это проблема с чтением. Я собираюсь обновить вопрос

Stacy 17.03.2022 18:33

@ibmx спасибо за предложение. Это не помогло. Все еще получаю ['23', ' " 5', '000.00 "', 'A']

Stacy 17.03.2022 18:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны установить значение skipinitialspace.

У меня есть следующий код:

import pandas as pd

result = pd.read_csv("data.csv", sep=',', quotechar='"', skipinitialspace=True)
print(result.columns)

И мой data.csv выглядит так: 23; "5000,0"; А

Выполнение приведенного выше кода дает такой результат: Индекс([u'23', u' 5000,0 ', u'A'], dtype='объект')

skipinitialspace удалит лишние пробелы из « 5,000.0 ». Если вы попытаетесь удалить лишние пробелы вручную, то вы можете не указывать этот параметр, и он также будет работать нормально.

Другие вопросы по теме