2013-10-01 2 views
16

나는 시간 인덱스 데이터가 :pandas - 새 행의 모든 ​​열을 NaN으로 설정하는 DataFrame의 인덱스를 확장 하시겠습니까?

df2 = pd.DataFrame({ 'day': pd.Series([date(2012, 1, 1), date(2012, 1, 3)]), 'b' : pd.Series([0.22, 0.3]) }) 
df2 = df2.set_index('day') 
df2 
       b 
day    
2012-01-01 0.22 
2012-01-03 0.30 

무엇 모든 열이 NaN로 설정 2012년 1월 (말), (매일 하나 개의 행을 가질 수 있도록이 데이터 프레임을 확장 할 수있는 가장 좋은 방법은 여기에만 b) 어디에 우리는 데이터가 없어?

그래서 원하는 결과는 다음과 같습니다

   b 
day    
2012-01-01 0.22 
2012-01-02 NaN 
2012-01-03 0.30 
2012-01-04 NaN 
... 
2012-01-31 NaN 

많은 감사합니다!

답변

3

당신이 당신의 두 번째 부분에 대답하기 위해

df3 = df2.asfreq('D') 
df3 

Out[16]: 
       b 
2012-01-01 0.22 
2012-01-02 NaN 
2012-01-03 0.30 

을 원하는대로 당신은 내가 더 우아한 방법으로 생각할 수 없다, NaN가 작성 될 것입니다 fill_method 매개 변수 누락 된 값을 지정하지 않고, 주파수로 하루를 전달하는 재 샘플링 할 수 있습니다 순간 :

df3 = DataFrame({ 'day': Series([date(2012, 1, 4), date(2012, 1, 31)])}) 
df3.set_index('day',inplace=True) 
merged = df2.append(df3) 
merged = merged.asfreq('D') 
merged 


Out[46]: 
       b 
2012-01-01 0.22 
2012-01-02 NaN 
2012-01-03 0.30 
2012-01-04 NaN 
2012-01-05 NaN 
2012-01-06 NaN 
2012-01-07 NaN 
2012-01-08 NaN 
2012-01-09 NaN 
2012-01-10 NaN 
2012-01-11 NaN 
2012-01-12 NaN 
2012-01-13 NaN 
2012-01-14 NaN 
2012-01-15 NaN 
2012-01-16 NaN 
2012-01-17 NaN 
2012-01-18 NaN 
2012-01-19 NaN 
2012-01-20 NaN 
2012-01-21 NaN 
2012-01-22 NaN 
2012-01-23 NaN 
2012-01-24 NaN 
2012-01-25 NaN 
2012-01-26 NaN 
2012-01-27 NaN 
2012-01-28 NaN 
2012-01-29 NaN 
2012-01-30 NaN 
2012-01-31 NaN 

이 두 번째 시리즈를 구성하고 우리는 단지 추가 및 이전 asfreq('D')를 호출합니다.

+0

덕분에 -이 구멍을 채우기 위해 매우 중요하지만, 어떻게'2012-01-31'로 확장 할 수 있습니다 (말하다). – paul

+0

흠. 하지만 원래의 시계열에 여러 개의 구멍이나 틈이 있다면 더 이상 작동하지 않습니다. – paul

+0

@paul 예 내 대답은이 점에서 제한되어 있으므로 좀 더 일반적인 방법을 생각할 수 없습니다. 가능한 경우 모든 예상 값을 사용하여 DataFrame을 만드는 것이 더 좋을 것입니다. 가능한 한 더 좋은 결과를 얻을 수 있는지 알아 봅니다. – EdChum

17

사용이 :

ix = pd.DatetimeIndex(start=date(2012, 1, 1), end=date(2012, 1, 31), freq='D') 
df2.reindex(ix) 

제공 :

   b 
2012-01-01 0.22 
2012-01-02 NaN 
2012-01-03 0.30 
2012-01-04 NaN 
2012-01-05 NaN 
[...] 
2012-01-29 NaN 
2012-01-30 NaN 
2012-01-31 NaN 
2

을 여기에 또 다른 옵션들 : 먼저 다음 다시 샘플링, 당신이 원하는 마지막 날에 NaN 레코드를 추가. 이 방법은 재 샘플링으로 누락 날짜를 채 웁니다.

시작 프레임 :

import pandas as pd 
import numpy as np 
from datetime import date 

df2 = pd.DataFrame({ 'day': pd.Series([date(2012, 1, 1), date(2012, 1, 3)]), 'b' : pd.Series([0.22, 0.3]) }) 
df2= df2.set_index('day') 
df2 

Out: 
        b 
    day 
    2012-01-01 0.22 
    2012-01-03 0.30 

가득 프레임 :

df2 = df2.set_value(date(2012,1,31),'b',np.float('nan')) 
df2.asfreq('D') 

Out: 
       b 
    day 
    2012-01-01 0.22 
    2012-01-02 NaN 
    2012-01-03 0.30 
    2012-01-04 NaN 
    2012-01-05 NaN 
    2012-01-06 NaN 
    2012-01-07 NaN 
    2012-01-08 NaN 
    2012-01-09 NaN 
    2012-01-10 NaN 
    2012-01-11 NaN 
    2012-01-12 NaN 
    2012-01-13 NaN 
    2012-01-14 NaN 
    2012-01-15 NaN 
    2012-01-16 NaN 
    2012-01-17 NaN 
    2012-01-18 NaN 
    2012-01-19 NaN 
    2012-01-20 NaN 
    2012-01-21 NaN 
    2012-01-22 NaN 
    2012-01-23 NaN 
    2012-01-24 NaN 
    2012-01-25 NaN 
    2012-01-26 NaN 
    2012-01-27 NaN 
    2012-01-28 NaN 
    2012-01-29 NaN 
    2012-01-30 NaN 
    2012-01-31 NaN 
관련 문제