Pandas при чтении csv файла не разделяет данные, а оставляет их в первом столбце
Пытаюсь разделить данные, но pandas все оставляет в первом столбце.
df = pd.read_csv('testdata.csv',sep=',',encoding ='cp1251')
Как быть с этой проблемой? Прикрепляю ссылку на файл, который не могу прочитать.
https://drive.google.com/drive/folders/1RJDRRZZN9V8z5nCkFJA89jHzecrRWxBx?usp=sharing
Ответы (1 шт):
Посмотрим, что за странный такой файл, выведем на печать несколько строк:
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 ""Регистрация пользователя"""
...
Далее вам нужно будет вычистить лишние кавычки из первого и последнего столбца, но это уже совсем не сложно. А вообще я бы рекомендовал всё же убрать эти кавычки из исходного файла, они там явно лишние. И грузить после этого датафрейм нормальным образом.
