Невозможно прочитать CSV-файл, созданный Google Survey с помощью Pandas - PullRequest
0 голосов
/ 12 июня 2018

Я всего несколько недель изучаю Python и данные.Я пытаюсь проанализировать набор данных из более чем 3000 ответов, сгенерированных Google Survey для моей компании.

Так выглядит набор данных: Первые несколько строк набора данных

 import pandas as pd
    data=pd.read_csv('Survey.csv')

Я получил ошибку "ParserError: Error tokenizing data. C error: Expected 6 fields in line 6, saw 7".

Я предполагаю, что некоторые вопросы в опросе позволяют пользователям выбирать несколько вариантов выбора, что приводит к некоторой ячейке в файле CSV, в котором хранятсясписок значений, а не значение.Значения в таком списке разделяются символом «,».Наглядным примером является значение в столбце «Paper_Comic_Genre» выше.

Есть ли в любом случае я могу прочитать этот CSV-файл в Python, а затем очистить его там вместо выполнения работы в Excel?

Большое вам спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Большое спасибо за все предложения.Амара, твое решение слишком сложно для меня, чтобы понять: D.Я попробовал это и получил ошибку "index out of range".Этот код, наконец, работает для меня:

import pandas as pd
data = pd.read_csv('Survey.csv', sep=',', error_bad_lines=False, encoding="ISO-8859-1")
data.info()

Я наконец понял, что проблема вызвана проблемами Unicode.Что касается sep = ',', я должен сделать метод проб и ошибок, так как я не знаю, какой разделитель (',' или ';' или '\ t') использовать.Я использую Mac, таким образом, не имея доступа к notepadd ++.Sublime Text не дает подсказки.

Результат:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5086 entries, 0 to 5085
Data columns (total 43 columns):
0 голосов
/ 12 июня 2018

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

        import re
        #native module


        def tricky_parsing(number_of_sep,text):
            sep=[m.start() for m in re.finditer(',', text)]
        #array of each delimiter positions 


            tricky_list=[]
            tricky_list.append(text[:sep[0]])

            for i in range(1,number_of_sep):
                 tricky_list.append(text[sep[i-1]+1:sep[i]])

            tricky_list.append(text[sep[number_of_sep-1]+1:])

            return tricky_list

        #test
        tricky_parsing(4,"amara,boudib,test1,test3,,1,2,3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...