2016-11-22 4 views
1

이 데이터를 매월 서식을 지정하려고 시도하지만 현재 날짜로 작성하려고합니다.파이썬을 사용할 때 주말과 공휴일을 어떻게 계산할 것인가?

import pandas as pd 
import datetime 
import quandl 
import numpy as np 

start = datetime.datetime(1993, 10, 2) 
end = datetime.date.today() 

df = quandl.get("FRED/DGS20", collapse="daily").reset_index() 
df.index=np.arange(0,len(df)) 

print (df) 

l=[] 
for i in range(0,len(df)): 
    if (df['DATE'].loc[i]).day == (df['DATE'].loc[len(df)-1]).day: 
     l.append(df['DATE'].loc[i]) 

내가 실행중인 문제는 해당 날짜가 주말이나 공휴일 인 경우 해당 월을 건너 뜁니다. 주어진 날짜가 N/A라면 가장 가까운 해당 날짜를 선택하도록 어떻게 파이썬을 얻을 수 있습니까?

답변

0

길이가 길지만 루프가 없습니다. 내 코드를 df.index=np.arange(0,len(df)) 행 뒤에 삽입하십시오.

years = pd.DatetimeIndex(df['DATE']).year 
years_u = np.unique(years) 
years_u_norm = years_u - years_u[0] 
months = pd.DatetimeIndex(df['DATE']).month 
months_u = np.unique(months) 
months_u_norm = months_u - months_u[0] 
days = pd.DatetimeIndex(df['DATE']).day 
days_u = np.unique(days) 
days_u_norm = days_u - days_u[0] 
shp = (years_u_norm[-1]+1, months_u_norm[-1]+1, days_u_norm[-1]+1) 
mat = np.full(shp, np.nan).ravel() 

y_ind = years - years_u[0] 
m_ind = months - months_u[0] 
d_ind = days - days_u[0] 
inds = np.vstack([y_ind[np.newaxis], m_ind[np.newaxis], d_ind[np.newaxis]]) 

inds2 = np.ravel_multi_index(inds, shp) 
inds_grid = np.indices(shp)[2].ravel() 
mat[inds2] = inds_grid[inds2] 
start_ind = np.ravel_multi_index([[start.year - years_u[0]], [start.month - months_u[0]], [start.day - days_u[0]]], shp) 
mat[:start_ind] = np.inf 
end_ind = np.ravel_multi_index([[end.year - years_u[0]], [end.month - months_u[0]], [end.day - days_u[0] + 1]], shp) 
mat[end_ind:] = np.inf 

mat = mat.reshape(shp) 
dist = np.absolute(mat - np.full(shp, end.day-1)) 

min_dist = np.nanargmin(dist, axis=2) + 1 
inds_f = np.unique(np.ravel_multi_index(inds[:-1, :], shp[:-1])) 
res_inds = np.indices(min_dist.shape) 
res_y = res_inds[0].ravel()[inds_f] + years_u[0] 
res_m = res_inds[1].ravel()[inds_f] + months_u[0] 
res_d = min_dist.ravel()[inds_f] 

df = pd.DataFrame({'year': res_y, 
        'month': res_m, 
        'day': res_d}) 
print(df)