2016-04-27 8 views
5

Próbuję do 2 kolumny pliku csv (error.csv) z separatorem pół kolumny, która zawiera podwójne notowane naczepy kolumny:python pandy read_csv stanie odczytać charakter podwójnie cytowany dwukrotnie

col1;col2 
2016-04-17_22:34:25.126;"Linux; Android" 
2016-04-17_22:34:25.260;"{"g":2}iPhone; iPhone" 

i ja Usiłuję:

logs = pd.read_csv('error.csv', na_values="null", sep=';', 
        quotechar='"', quoting=0) 

rozumiem, że problem wynika z konieczności podwójnego cytowany «g» w moim cudzysłowach w linii 3, ale nie mogę dowiedzieć się, jak radzić sobie z nim. Jakieś pomysły ?

+1

Po prostu pozwoliłbym na parsowanie z podwójnymi cudzysłowami, a następnie ręcznie rozebrałem je wzdłuż drugiej kolumny. Myślę, że jest to ładniejsze i szybsze niż samodzielne przetwarzanie pliku. –

Odpowiedz

1

Prawdopodobnie konieczne będzie wstępne przetworzenie danych, aby były zgodne z oczekiwanym formatem CSV. Wątpię, czy pandas obsłuży to po prostu zmieniając parametr lub dwa.

Jeśli istnieją tylko dwie kolumny, a pierwszy nie zawiera średnik, a następnie można podzielić linie na pierwszym średnikiem:

records = [] 
with open('error.csv', 'r') as fh: 
    # first row is a header 
    header = next(fh).strip().split(';') 

    for rec in fh: 
     # split only on the first semi-colon 
     date, dat = rec.strip().split(';', maxsplit=1) 
     # assemble records, removing quotes from the second column 
     records.append((date, dat.strip('"'))) 

# create a data frame 
df = pandas.DataFrame.from_records(records, columns=header) 

trzeba będzie ręcznie analizować daty siebie z modułem datetime, jeśli chcesz, aby pierwsza kolumna zawierała właściwe daty, a nie ciągi.

+0

Aby parsować daty, jeśli nie działa podpowiedź pand, użyj czegoś takiego: 'pd.read_csv ('error.csv', date_parser = lambda x: datetime.datetime.strptime (x, ''% Y-% m-% d_% H:% M:% S.% f ")'. Patrz [ta tabela] (https://docs.python.org/2/library/datetime.html#strftime-and-strstrime-behavior) dla dokładny format. –

Powiązane problemy