2013-07-05 39 views
6

Tôi đã xem câu trả lời cho câu hỏi này: Parse dates when YYYYMMDD and HH are in separate columns using pandas in Python, nhưng nó dường như không hiệu quả với tôi, điều này khiến tôi nghĩ rằng mình đang làm điều gì đó sai .Đọc dữ liệu từ csv vào gấu trúc khi ngày và thời gian nằm trong các cột riêng biệt

Tôi có dữ liệu trong các tệp .csv, mà tôi đang cố gắng đọc bằng chức năng read_csv của gấu trúc. Ngày và thời gian nằm trong hai cột riêng biệt, nhưng tôi muốn hợp nhất chúng thành một cột, "Ngày giờ", chứa các đối tượng datetime. Csv trông như thế này:

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... 
    ... 

Tôi đang cố gắng để đọc nó bằng cách sử dòng mã này:

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

Tuy nhiên, khi tôi viết nó lại ra một csv, nó trông giống hệt nhau (ngoại trừ các -99,9 được đổi thành NA, như tôi đã chỉ định với đối số na_values). Ngày và thời gian nằm trong hai cột riêng biệt. Như tôi đã hiểu, điều này sẽ tạo một cột mới được gọi là Ngày giờ bao gồm các cột 1 và 2, được phân tích bằng cách sử dụng date_parser. Tôi cũng đã thử sử dụng parse_dates = {"Datetime": ["Date", "Time"]}, parse_dates = [[1,2]] và parse_dates = [["Date", "Time"]]. Tôi cũng đã cố gắng sử dụng date_parser = phân tích, nơi phân tích cú pháp được định nghĩa là:

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

Không ai trong số những đã đạt được chút ít sự khác biệt, mà làm cho tôi nghi ngờ rằng có một số vấn đề sâu sắc hơn. Bất kỳ cái nhìn sâu sắc vào những gì nó có thể được?

+0

Nó làm việc cho tôi với dữ liệu mẫu của bạn. Tôi đã phải đưa ra date_parser = True bit, mặc dù. – dooz

+0

Rất tiếc, bây giờ tôi nhìn vào điều này, tôi nghĩ rằng cách của bạn cũng nên hoạt động, phiên bản gấu trúc nào bạn đang sử dụng? –

+0

Vui vì tôi không điên vì nghĩ nó có vẻ đúng :). Tôi đang sử dụng gấu trúc phiên bản 0.7.0-1 trên phiên bản Linux Mint 13 MATE. – seaotternerd

Trả lời

3

Bạn nên cập nhật gấu trúc của mình, tôi khuyên bạn nên latest stable version để biết các tính năng và sửa lỗi mới nhất.

tính năng cụ thể này là introduced in 0.8.0, và hoạt động trên phiên bản gấu trúc 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 

mà không date_parser=True (vì đây phải là một phân tích cú pháp chức năng, xem docstring).

Lưu ý rằng trong ví dụ được cung cấp, cột "Ngày giờ" là một Chuỗi của riêng nó và không phải là giá trị chỉ mục của DataFrame. Nếu bạn muốn có các giá trị ngày giờ như cột chỉ mục thay vì giá trị số nguyên vượt qua đối số index_col chỉ định cột mong muốn, trong trường hợp này là 0 vì cột "Ngày giờ" là cột đầu tiên.

In [11]: read_csv("2069_ALL_YEAR=2008.csv", skiprows=2, parse_dates={"Datetime" : [1,2]}, index_col=0, na_values=["-99.9"]) 
Các vấn đề liên quan