2016-06-28 3 views
1

date_range 만든 데이터없이 data.asfreq(MonthEnd())을 사용할 수 있는지를 찾으려고합니다. 내가 뭘하려고하는지.팬더 주파수 변환

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

그리고 일부 인쇄 때 명령 :

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')를 사용하여이 작업을 수행하기 위해 노력하고있어. 지금까지 실패했습니다. 나는 다음과 같은 오류가 있습니다

내가 asfreq를 사용할 수있다
NameError: name 'MonthBegin' is not defined 

내 질문에 내가 프레임을 만들 수 date_range를 사용하지 않는 경우? 어떻게 든 내 날짜 열을 함수에 '전달'합니다. 이것이 해결책이 아니라면 분기 별 월간 빈도로 변환하는 다른 쉬운 방법이 있습니까?

+1

오류 메시지는 문제가 무엇인지 ...'시액을 시도 꽤 분명하다 .asfreq ('M', how = 'start', method = 'pad')'. –

+0

설명서를 더 잘 살펴야합니다. 나는 그것을 시도하지만 그것은 어떤 식 으로든 시리즈를 변경하지 않습니다. 어떤 오류도 포드하지 않습니다. 나는 뭔가를보기 위해 '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) 

편집 : 당신은 또한 대신 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'). 합계(). sort_index (오름차순 = 거짓)'. –

+0

같은 메모 변경. 오류도 없습니다. 이 코드는 이제 매우 간단하게 보입니다. 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 (오름차순 = 거짓)'. 이것은'print (data.dtypes)'-'VALUE float64 dtype : object'의 결과입니다. 적절한 날짜 유형이 없습니다. 실제 주파수가 없다면'resample'을 할 수 있습니까? – sretko