2013-07-05 11 views
6

Spojrzałem na odpowiedź na to pytanie: Parse dates when YYYYMMDD and HH are in separate columns using pandas in Python, ale to nie działa dla mnie, co powoduje, że myślę, że robię coś pod niewłaściwego .Czytanie danych z csv na pandy, gdy data i godzina znajdują się w oddzielnych kolumnach

Mam dane w plikach .csv, które próbuję odczytać za pomocą funkcji pandas read_csv. Data i godzina są w dwóch oddzielnych kolumnach, ale chcę scalić je w jedną kolumnę "Datetime", zawierającą obiekty datetime. CSV wygląda tak:

Note about the data 
    blank line 
    Site Id,Date,Time,WTEQ.I-1... 
    2069, 2008-01-19, 06:00, -99.9... 
    2069, 2008-01-19, 07:00, -99.9... 
    ... 

próbuję go odczytać za pomocą poniższego wiersza kodu:

read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates={"Datetime" : [1,2]}, date_parser=True, na_values=["-99.9"]) 

Jednak, gdy piszę go z powrotem do csv, wygląda dokładnie tak samo (z tą różnicą, że -99.9s są zmienione na NA, jak to określiłem z argumentem na_values). Data i godzina są w dwóch osobnych kolumnach. Jak rozumiem, powinno to być utworzenie nowej kolumny o nazwie Datetime, która składa się z kolumn 1 i 2, analizowanych przy użyciu date_parser. Próbowałem również using parse_dates = {"Datetime": ["Date", "Time"]}, parse_dates = [[1,2]] i parse_dates = [["Date", "Time"]]. Próbowałem również używając date_parser = analizować, gdzie parse jest zdefiniowany jako:

parse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M') 

Żaden z nich nie uczynił najmniejszego trochę różnica, która sprawia mi podejrzewać, że istnieje jakiś głębszy problem. Jaki wgląd w to, co to może być?

+0

Działa dla mnie z przykładowymi danymi. Musiałem jednak usunąć date_parser = True bit. – dooz

+0

Ooops, teraz patrzę na to, myślę, że twoje sposoby powinny również zadziałać, której wersji pandy używasz? –

+0

Cieszę się, że nie jestem szalony, sądząc, że wydawało się to właściwe :). Używam pand w wersji 0.7.0-1 na Linux Mint 13 MATE. – seaotternerd

Odpowiedz

3

Powinieneś zaktualizować swoje pandy, polecam latest stable version, aby uzyskać najnowsze funkcje i poprawki błędów.

Ta specyficzna cecha była introduced in 0.8.0 i działa na pandy wersji 0.11:

In [11]: read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates={"Datetime" : [1,2]}, na_values=["-99.9"]) 
Out[11]: 
      Datetime Site Id WTEQ.I-1 
0 2008-01-19 06:00:00  2069  NaN 
1 2008-01-19 07:00:00  2069  NaN 

bez date_parser=True (ponieważ powinno to być parsowania funkcja, patrz docstring).

Należy zauważyć, że w podanym przykładzie wynikowa kolumna "Datetime" to sama seria, a nie wartości indeksu obiektu DataFrame. Jeśli wolisz mieć wartości datetime jako kolumny indeksu zamiast wartości całkowitej, podaj argument index_col określający żądaną kolumnę, w tym przypadku 0, ponieważ wynikowa kolumna "Datetime" jest pierwszą.

In [11]: read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates={"Datetime" : [1,2]}, index_col=0, na_values=["-99.9"]) 
Powiązane problemy