Python重采样-填充不填充NAN

时间:2018-10-17 20:01:37

标签: python python-3.x datetime

我使用NaN's对时间序列进行上采样后,尝试填写resample's pad() function

我使用resample('1min').asfreq从每小时数据到分钟间隔数据进行上采样,然后使用resample.('1min').pad()并没有像以前那样用先前的值填充NaN值Pandas.Dataframe.resample tutorial

运行以创建具有日期时间索引的数据框

url = "https://www.ndbc.noaa.gov/view_text_file.php?filename=42887h2016.txt.gz&dir=data/historical/stdmet/"
data_csv = urlopen(url)
df = pd.read_csv(data_csv, delim_whitespace=True, index_col=0, parse_dates=True)
df.drop(['WDIR', 'WSPD', 'GST', 'WVHT', 'DPD', 'APD', 'MWD', 'PRES', 'VIS', 'TIDE', 'VIS', 'ATMP', 'WTMP'], 
        axis = 1, inplace = True)

#Data Preparation
df.reset_index(level=0, inplace=True)
df = df.iloc[1:]
df = df.rename(columns={'#YY': 'YY'})

#Create datetime variable
df['Date'] = df[df.columns[0:3]].apply(lambda x: '/'.join(x.dropna().astype(int).astype(str)),axis=1)
df['Time'] = df[df.columns[3:5]].apply(lambda x: ':'.join(x.dropna().astype(int).astype(str)),axis=1)
df['Date.Time'] = df['Date'] + ':' + df['Time']
df['Date'] = pd.to_datetime(df['Date'], format = '%Y/%m/%d')
df['Date.Time'] = pd.to_datetime(df['Date.Time'], format='%Y/%m/%d:%H:%M', utc=True)

#Remaining data prep for the dataframe and create index w/ time date
df = df.convert_objects(convert_numeric=True)
df = df[(df['MM'] == 2.0) | (df['MM'] == 3.0)]
df = df.replace(999, np.nan)
df = df.set_index('Date.Time')
df.drop(['hh', 'mm', 'Time', 'Date'], axis = 1, inplace = True)

结果是我们想要的数据框:

                             YY  MM  DD  DEWP
Date.Time                                    
2016-12-01 00:00:00+00:00  2016  12   1  11.3
2016-12-01 01:00:00+00:00  2016  12   1   9.0
2016-12-01 02:00:00+00:00  2016  12   1  11.0
2016-12-01 03:00:00+00:00  2016  12   1  10.8
2016-12-01 04:00:00+00:00  2016  12   1   6.5

现在每小时最多可以重新采样1分钟

df = df.resample('1min').asfreq()
df.head()

结果:

                               YY    MM   DD  DEWP
Date.Time                                         
2016-12-01 00:00:00+00:00  2016.0  12.0  1.0  11.3
2016-12-01 00:01:00+00:00     NaN   NaN  NaN   NaN
2016-12-01 00:02:00+00:00     NaN   NaN  NaN   NaN
2016-12-01 00:03:00+00:00     NaN   NaN  NaN   NaN
2016-12-01 00:04:00+00:00     NaN   NaN  NaN   NaN

使用Pad命令填充NaN值

df = df.resample('1min').pad()
df.head()

结果:

                               YY    MM   DD  DEWP
Date.Time                                         
2016-12-01 00:00:00+00:00  2016.0  12.0  1.0  11.3
2016-12-01 00:01:00+00:00     NaN   NaN  NaN   NaN
2016-12-01 00:02:00+00:00     NaN   NaN  NaN   NaN
2016-12-01 00:03:00+00:00     NaN   NaN  NaN   NaN
2016-12-01 00:04:00+00:00     NaN   NaN  NaN   NaN

变量DEWP应该看起来像这样

                               YY    MM   DD  DEWP
Date.Time                                         
2016-12-01 00:00:00+00:00  2016.0  12.0  1.0  11.3
2016-12-01 00:01:00+00:00  2016.0  12.0  1.0  11.3
2016-12-01 00:02:00+00:00  2016.0  12.0  1.0  11.3
2016-12-01 00:03:00+00:00  2016.0  12.0  1.0  11.3
2016-12-01 00:04:00+00:00  2016.0  12.0  1.0  11.3

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

函数df.resample('1min').fillna("pad")有效。可以找到文档here