6

私はパンダを使用して、に保存されている日中のデータdata_mを毎日のデータに変換しています。何らかの理由resampleで、日中のデータに存在しなかった日の行を追加しました。たとえば、2000年1月8日は日中のデータには含まれていませんが、日次のデータには、NaNを値として持つその日付の行が含まれています。DatetimeIndexには、実際のデータよりも多くのエントリがあります。私は何か間違ったことをしていますか?

data_m.resample('D', how = mean).head()
Out[13]: 
           x
2000-01-04 8803.879581
2000-01-05 8765.036649
2000-01-06 8893.156250
2000-01-07 8780.037433
2000-01-08 NaN

data_m.resample('D', how = mean)
Out[14]: 
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 4729 entries, 2000-01-04 00:00:00 to 2012-12-14 00:00:00
Freq: D
Data columns:
x    3241  non-null values
dtypes: float64(1)
4

2 に答える 2

5

あなたがしていることは正しいように見えます、それはパンダが空の配列の平均のためにNaNを与えるということだけです。

In [1]: Series().mean()
Out[1]: nan

resample通常の時間間隔に変換されるため、その日にサンプルがない場合はNaNを取得します。

ほとんどの場合、NaNを使用しても問題はありません。使用できる場合fill_method(たとえば'ffill')、または本当に削除したい場合は使用できますdropna(非推奨):

data_m.resample('D', how = mean, fill_method='ffill')
data_m.resample('D', how = mean).dropna()

更新:現代の同等物は次のようです:

In [21]: s.resample("D").mean().ffill()
Out[21]:
                      x
2000-01-04  8803.879581
2000-01-05  8765.036649
2000-01-06  8893.156250
2000-01-07  8780.037433
2000-01-08  8780.037433

In [22]: s.resample("D").mean().dropna()
Out[22]:
                      x
2000-01-04  8803.879581
2000-01-05  8765.036649
2000-01-06  8893.156250
2000-01-07  8780.037433

リサンプルドキュメントを参照してください。

于 2012-12-21T05:14:38.780 に答える
1

0.10.0より前では、パンダは右端のリサンプリングビンにラベルを付けていました。これは、毎日のリサンプリングでは翌日です。0.10.0以降、label='left', closed='left'この混乱を最小限に抑えるために、毎日およびそれ以上の頻度のデフォルトのビニング動作が変更されました。詳細については、 http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#api-changesを参照してください。

于 2012-12-21T05:08:00.407 に答える