2013-05-26 25 views
8

Tôi đang nhập CSV của dữ liệu kinh tế vĩ mô và không thể tìm ra cách để Pandas giải thích loại ngày này. Có cách nào để tự động làm hay tôi sẽ cần phải phân tích cú pháp đó?Pandas có hỗ trợ các ngày quý của biểu mẫu yyyyQp (ví dụ: 2013Q2) không?

Khi tôi yêu cầu phân tích cú pháp để cố gắng, tôi nhận được:

File "datetime.pxd", line 133, in datetime._string_to_dts (pandas/tslib.c:31399)ValueError: Unable to parse 2002Q1 
+0

Lớp thời gian sẽ chấp nhận định dạng này và hiểu nó, nhưng dường như không nhận ra nó khi nhập từ CSV vào một khung dữ liệu. – kdamica

Trả lời

7

pd.Period có thể phân tích cú pháp hàng quý, bạn có thể sử dụng nó làm tùy chỉnh date_parser. Sau đó, để chuyển đổi ngày đến ngày cuối cùng của quý này, bạn có thể sử dụng mapend_time thuộc tính:

import pandas as pd 

text = '''\ 
date val 
2013Q2 100 
2013Q3 120 
''' 

filename = '/tmp/data' 
with open(filename, 'w') as f: 
    f.write(text) 
df = pd.read_table(filename, sep='\s+', date_parser=pd.Period, parse_dates=[0]) 
df['date'] = df['date'].map(lambda x: x.end_time.date()) 

print(df) 
#   date val 
# 0 2013-06-30 100 
# 1 2013-09-30 120 
0

Nó có hỗ trợ rất tốt đẹp cho tất cả các ngày kinh doanh/thời điểm khác nhau và tần số. Nhưng bạn có thể sẽ phải phân tích cú pháp định dạng cụ thể đó.

0

Dưới đây là một cái gì đó để giúp đỡ những người có nhiều năm và quý trong các cột khác nhau:

year quarter foo 
1994 q1  10 
1994 q3  20 
1995 q1  30 
1995 q3  40 

Đối số parse_dates cho read_csv chỉ hoạt động. Rất thú vị:

>>> pd.read_csv('bar.csv', parse_dates={'period':['year', 'quarter']}) 
period  foo 
1994 q1  10 
1994 q3  20 
1995 q1  30 
1995 q3  40 
Các vấn đề liên quan