2016-09-20 25 views
3

私は私がデータを読んでいるこのパンダ日平均、pandas.resample

Date,Temp1,Temp2 

23-Oct-09 01:00:00,21.1,22.3 

23-Oct-09 04:00:00,22.3,23.8 

23-Oct-09 07:00:00,21.4,21.3 

23-Oct-09 10:00:00,21.5,21.6 

23-Oct-09 13:00:00,22.3,23.8 

23-Oct-09 16:00:00,21.4,21.3 

23-Oct-09 19:00:00,21.1,22.3 

23-Oct-09 22:00:00,21.4,21.3 

24-Oct-09 01:00:00,22.3,23.8 

24-Oct-09 04:00:00,22.3,23.8 

24-Oct-09 07:00:00,21.1,22.3 

24-Oct-09 10:00:00,22.3,23.8 

24-Oct-09 13:00:00,21.1,22.3 

24-Oct-09 16:00:00,22.3,23.8 

24-Oct-09 19:00:00,21.1,22.3 

24-Oct-09 22:00:00,22.3,23.8 

に似たcsvファイルがあります。

df=pd.read_csv('data.csv', index_col=0) 

を、日付時刻にインデックスを変換

df.index=pd.to_datetime(df.index) 

今、私は毎日の気温の平均を取って、私は以下のようにpd.resampleを使用しようとしていますが、エラーを受けています。私はdatetime型のインデックスと2つの2列のデータフレームであることをdf_avgをしたいと思い

df_avg = df.resample('D', how = 'mean') 

DataError: No numeric types to aggregate

...ここにpandas.resampleドキュメントや多数の例を読んで、損失にとどまっていました。私はパンダ0.17.1とPython 3.5.2を使用しています。あなたがfloat最初にstring列を変換する必要がある

答えて

2

#add parameter parse_dates for convert to datetime first column 
df=pd.read_csv('data.csv', index_col=0, parse_dates=[0]) 

df['Temp1'] = df.Temp1.astype(float) 
df['Temp2'] = df.Temp2.astype(float) 

df_avg = df.resample('D', how = 'mean') 

astype場合はリターンerror、問題はいくつかの非数値があります。だから、errors='coerce'to_numericを使用する必要がある - そして、すべての「問題」の値がNaNに変換されます。

df['Temp1'] = pd.to_numeric(df.Temp1, errors='coerce') 
df['Temp2'] = pd.to_numeric(df.Temp2, errors='coerce') 

あなたはまた、boolean indexingで問題の値を持つすべての行を確認することができます。

print df[pd.to_numeric(df.Temp1, errors='coerce').isnull()] 
print df[pd.to_numeric(df.Temp2, errors='coerce').isnull()] 
+0

私の答えは参考になりました場合は、 [承諾](http://meta.stackexchange.com/a/5235/295067)それを忘れないでください。ありがとう。 – jezrael

+0

このメソッドは廃止され、リサンプルコードはdf.resample( 'D')になります。 – PJW