Pandas при чтении csv файла не разделяет данные, а оставляет их в первом столбце

Пытаюсь разделить данные, но pandas все оставляет в первом столбце.

df = pd.read_csv('testdata.csv',sep=',',encoding ='cp1251')

введите сюда описание изображения

Как быть с этой проблемой? Прикрепляю ссылку на файл, который не могу прочитать.

https://drive.google.com/drive/folders/1RJDRRZZN9V8z5nCkFJA89jHzecrRWxBx?usp=sharing


Ответы (1 шт):

Автор решения: CrazyElf

Посмотрим, что за странный такой файл, выведем на печать несколько строк:

with open('testdata.csv', encoding='cp1251') as f:
    print(*f.readlines()[:4])

Ага, у вас проблема в том, что все строчки кроме заголовка у вас закавычены:

Week,Date,Event_Count,FederalDistrict_Name,Event_Name
 "18,2018-05-01 00:00:00,117,Central,""Регистрация пользователя"""
 "18,2018-05-01 00:00:00,1,Far Eastern,""Регистрация пользователя"""
 "18,2018-05-01 00:00:00,10,North Caucasian,""Регистрация пользователя"""

Pandas воспринимает закавыченный текст как единое целое. У вас вся строка в кавычках, поэтому Pandas размещает всю строку в одну ячейку. Самый простой способ изменить это поведение и всё же прочитать такой файл в Pandas более-менее нормальным образом - отменить действие кавычек, например, с помощью параметра quoting=3 (либо задав другой символ квотирования с помощью параметра quotechar=, но тогда надо выбрать символ, которого точно нет в файле):

import pandas as pd

df = pd.read_csv('testdata.csv', sep=',', encoding ='cp1251', quoting=3)
df

Получили такой датафрейм:

    Week    Date    Event_Count FederalDistrict_Name    Event_Name
0   "18 2018-05-01 00:00:00 117 Central ""Регистрация пользователя"""
1   "18 2018-05-01 00:00:00 1   Far Eastern ""Регистрация пользователя"""
2   "18 2018-05-01 00:00:00 10  North Caucasian ""Регистрация пользователя"""
...

Далее вам нужно будет вычистить лишние кавычки из первого и последнего столбца, но это уже совсем не сложно. А вообще я бы рекомендовал всё же убрать эти кавычки из исходного файла, они там явно лишние. И грузить после этого датафрейм нормальным образом.

→ Ссылка