Dataframe, экспортируемый в CSV, отличается от данных, отображаемых в разных столбцах, тогда изначально был

#python #csv #pandas #export-to-excel

#python #csv #панды #экспорт в excel

Вопрос:

Я пытаюсь прочитать CSV как фрейм данных, затем отсортировать по столбцу и впоследствии вывести отсортированный фрейм данных в новый CSV. Однако проблема в том, что мой выходной CSV не похож на отсортированный фрейм данных с данными, перемещаемыми в неправильные столбцы и т. Д. И т. Д. Я подозреваю, что проблема связана с данными, поскольку некоторые столбцы состоят из длинных строк и могут содержать специальные символы — это потому, что, когда я удалил определенные столбцы, шаги, которые я предпринял ниже, работают. Я попытался экспортировать и повторно импортировать dataframe как в формате dictionary, так и в формате pickle, и он работает отлично.

Сначала я читаю в файле CSV, а затем сортирую по столбцу (файлы csv, которые я использовал, можно загрузить в комментарии ниже (размер <100 КБ)

 df = pd.read_csv("database.csv",encoding = "ISO-8859-1")
sorteddf = df.sort_values(by="All Comment Score")
  

Это показывает, как выглядит фрейм данных после сортировки (что я хочу)

Затем я сохраняю свой фрейм данных в новом файле CSV и считываю этот новый CSV как новый фрейм данных:

 sorteddf.to_csv("test.csv")
newdf = pd.read_csv("test.csv",encoding = "ISO-8859-1")
  

Однако, когда я читаю недавно выведенный CSV-файл как новый фрейм данных, столбцы и данные выглядят беспорядочно:
Это показывает, как на самом деле выглядит фрейм данных, импортированный из выходного CSV

Я был бы очень признателен, если бы кто-нибудь мог пролить свет на мою проблему и указать мне правильное направление!

Комментарии:

1. Исходный CSV и выданный CSV-файл можно найти по адресу filedropper.com/files_10 (очень маленький размер файла, менее 100 КБ) Я должен опубликовать его здесь, потому что у меня меньше 10 очков репутации!

Ответ №1:

Вы говорите о неназванном столбце?

Попробуйте использовать
sorteddf.to_csv('test.csv', index=False)
это, чтобы pandas не выводил встроенный индексный столбец (большую часть времени вас это не волнует)

Комментарии:

1. Привет! Спасибо, что нашли время ответить мне. Я попробовал ваш метод, и перезагруженный фрейм данных выглядит следующим образом. Однако, если вы посмотрите на индекс 8, в столбце «автор» вместо того, чтобы показывать мне имя автора, вместо этого там есть гипертекстовая ссылка, другой пример будет в разделе «Оценка текущего комментария», строка 8 показывает мне название продукта.

2. Мое лучшее предположение о том, что происходит, заключается в том, что при записи фрейма данных в файл CSV … некоторые текстовые строки разбиваются на дополнительные столбцы, таким образом перемещая все последующие данные «на один столбец» вправо

Ответ №2:

У вас проблемы с декодированием / кодированием. Ваша кодировка не в «ISO», а в «latin-1». Это трудно исправить, если вы не выясните, почему вы читаете в своих данных таким образом.

Комментарии:

1. Привет! Спасибо, что нашли время ответить мне. Я на 100% уверен, что эти строки не существуют в исходном фрейме данных, потому что я визуально проверил данные в Excel (это всего 50 или около того строк) и потому, что данные были собраны с помощью короткого скрипта python, который я написал. Если вы не возражаете, вы можете попробовать загрузить файл, который я использовал в filedropper.com/files_10 (<100 кб). В исходном CSV вы можете видеть, что данные хорошо совпадают с их столбцами. Но после сортировки и записи в CSV вы можете видеть, что данные больше не совпадают с их столбцами.

2. У вас проблемы с декодированием / кодированием. Ваша кодировка не в «ISO», а в «latin-1». Это трудно исправить, если вы не выясните, почему вы читаете свои данные таким образом.

3. Привет, спасибо, что указали мне правильное направление! Мне удалось исправить свой скрипт и прочитать csv как utf-8, и теперь все отлично работает!

4. Потрясающе. Я обновил свой ответ на случай, если другие люди столкнутся с этой проблемой. Обязательно проголосуйте за принятый ответ.