2013-05-26 15 views
8

Bir CSV makroekonomik veri ithal ediyorum ve Panda'ların bu tür bir yorumu nasıl yorumlayacaklarını anlayamadım. Bunu otomatik olarak yapmanın bir yolu var mı yoksa kendim mi çözümlemeye ihtiyacım olacak? Ben denemek için ayrıştırıcı sorduğumdaPandalar, yyyyQp (ör. 2013Q2) formunun üç aylık tarihlerini destekliyor mu?

, alıyorum:

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

Dönem sınıfı bu formatı kabul edip anlayacaktır, ancak bir CSV'den bir veri çerçevesine aktarılırken bunu tanımak mümkün görünmüyor. – kdamica

cevap

7

pd.Period3 üç aylık dönemleri ayrılabildiğinden, özel date_parser olarak kullanabilirsiniz. Ardından, çeyreğin son tarih olarak dönüştürmek için, sen map ve end_time özelliği kullanabilirsiniz:

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

Tüm çeşitli iş tarihleri ​​/ saat ve frekanslar için çok güzel desteği vardır. Ama muhtemelen bu belirli formatı kendiniz ayrıştırmak zorunda kalacaksınız.

0

Burada farklı sütunlarda yıllar ve çeyrek yaşayabilmeleri için bir şey:

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

Yalnızca read_csv numaralı parse_dates argümanı çalışır. Çok cool:

>>> pd.read_csv('bar.csv', parse_dates={'period':['year', 'quarter']}) 
period  foo 
1994 q1  10 
1994 q3  20 
1995 q1  30 
1995 q3  40