2016-06-28 55 views
1

私はdata.asfreq(MonthEnd())date_range作成データを使用することが可能かどうかを調べようとしています。 私は何をしようとしています。パンダ周波数変換

tdelta = data.period[1] - data.period[0] 
data.period.freq = tdelta 

そして、いくつかの印刷comands:

print(data) 
print(data.period.freq) 
print(data.dtypes) 

import numpy as np 
import pandas as pd 
data = pd.read_csv("https://www.quandl.com/api/v3/datasets/FRED/GDPC1.csv?api_key=", parse_dates=True) 
data.columns = ["period", "integ"] 
data['period'] = pd.to_datetime(data['period'], infer_datetime_format=True) 

は、その後、私はこれを行うことによって、私の '期間' 列に周波数を割り当てたい:私は、次のコードでのCSVクエリを実行します

返品:

.......... 
270 1948-07-01 2033.2 
271 1948-04-01 2021.9 
272 1948-01-01 1989.5 
273 1947-10-01 1960.7 
274 1947-07-01 1930.3 
275 1947-04-01 1932.3 
276 1947-01-01 1934.5 

[277 rows x 2 columns] 
-92 days +00:00:00 
period datetime64[ns] 
integ   float64 
dtype: object 

私もそれがインデックス "することによって、元の「DATE」列を解析することができます:私は何をしたいか

data = pd.read_csv("https://www.quandl.com/api/v3/datasets/FRED/GDPC1.csv?api_key=", parse_dates=True, index_col='DATE') 

だけで毎月の行への四半期ごとのデータをひそかすることです。たとえば:

270 1948-07-01 2033.2 
271 1948-06-01 NaN 
272 1948-05-01 NaN 
273 1948-04-01 2021.9 
274 1948-03-01 NaN 
275 1948-02-01 NaN 
276 1948-01-01 1989.5 
......and so on....... 

私は最終的にts.asfreq(MonthBegin())と、ts.asfreq(MonthBegin(), method='pad')を使用してこれをやろうとしています。これまでのところ成功しなかった。

NameError: name 'MonthBegin' is not defined 

私はフレームを作成するためにdate_rangeを使用しない場合は私の質問は、私はasfreqを使用することができている:私は、次のようなエラーがありますか?何とか私の日付の列を関数に '渡す'。これが解決策でない場合は、毎月の頻度に四半期ごとに変換する他の簡単な方法がありますか?

+1

エラーメッセージは、問題が何であるか... 'TSを試してみてくださいにかなり明確です.asfreq( 'M'、how = 'start'、method = 'pad') '。 –

+0

私はドキュメントをよく見ているは​​ずです。私はそれを試みますが、それは決してシリーズを変更しません。それはどんなエラーでもpoduceしません。私は何かがあるかどうかを見るために 'W'で 'M'を変更しようとしました。どういたしまして。しかし、 'MS'に変更すると、 'TypeError:タイプ'タイムスタンプ 'とタイプ' int 'を比較できません。 – sretko

答えて

2

使用TimeGrouper

import pandas as pd 

periods = ['1948-07-01', '1948-04-01', '1948-01-01', '1947-10-01', 
      '1947-07-01', '1947-04-01', '1947-01-01'] 
integs = [2033.2, 2021.9, 1989.5, 1960.7, 1930.3, 1932.3, 1934.5] 
df = pd.DataFrame({'period': pd.to_datetime(periods), 'integ': integs}) 
df = df.set_index('period') 

df = df.groupby(pd.TimeGrouper('MS')).sum().sort_index(ascending=False) 

EDIT:あなたはまた、代わりにTimeGrouperresampleを使用することができます。

df.resample('MS').sum().sort_index(ascending=False) 
+0

カラムを関数に渡すことはできますか。たとえば 'periods = data.period'と' integs = data.integ'のようになります。問題は何百行もあることです。 – sretko

+0

正しく理解していれば、 'data = pd.read_csv(" ... "、parse_dates = True、index_col = 'DATE')'でデータをインポートしてから、 'data.resample( 'MS')。sum()。sort_index(昇順= False) '。 –

+0

同じ変更が加えられました。エラーもありません。コードは非常にシンプルです。 '' import pandas as pd data = pd.read_csv( "https://www.quandl.com/api/v3/datasets/FRED/GDPC1.csv?api_key="、parse_dates = True、index_col = 'DATE') '次に、新しい関数' data.resample( 'MS')。sum()。sort_index(ascending = False) 'を実行します。これは 'print(data.dtypes)' - 'VALUE float64 dtype:object'の結果です。適切な日付の種類はありません。実際の周波数がない場合は 'resample'を実行することは可能ですか? – sretko