2017-03-15 9 views
1

1年間で60分の降雨量の長いExcelファイルがあります。私はExcelファイルを読み込み、毎日降水量の降雨値を集計して(group.byがうまくいきます)、これらの値を新しいデータフレームに入れて、毎年の年が別の行になる場合は0雨が降るとその日の雨が降り、Valueになります。私は、私が取るべきステップと、以下のコードで私の試みを概説しました。私がコードしようとしたことがやっかいだとすれば、私は他の提案にもオープンしています。 Excelファイルの最初の行は次のようになります。groupbyを使用してデータを再フォーマットし、空白行をPythonのデータフレームに追加

60 Minute Counts, []    
Time Stamp Latitude Longitude Value() 
Dec 27 2015 01:30:00 AM 0.297 36.900 0.25 
Dec 25 2015 01:00:00 PM 0.297 36.900 0.51 
Dec 25 2015 10:30:00 AM 0.297 36.900 0.25 
Dec 25 2015 07:30:00 AM 0.297 36.900 0.25 
Dec 25 2015 05:00:00 AM 0.297 36.900 0.25 
Dec 25 2015 04:30:00 AM 0.297 36.900 0.25 
Dec 17 2015 02:30:00 AM 0.297 36.900 0.25 
Dec 16 2015 02:30:00 PM 0.297 36.900 0.25 
Dec 16 2015 02:00:00 PM 0.297 36.900 0.76 
Dec 16 2015 12:30:00 PM 0.297 36.900 0.25 
Dec 16 2015 12:00:00 PM 0.297 36.900 0.76 
Dec 16 2015 11:30:00 AM 0.297 36.900 5.08 
Dec 16 2015 11:00:00 AM 0.297 36.900 0.51 
Dec 15 2015 03:30:00 PM 0.297 36.900 0.25 

私はその後、私が周りにプレイしたExcelファイルに読み込む必要があります。

from openpyxl import load_workbook 

wb = load_workbook(filename = 'filename.xlsx') 
sheet_ranges = wb['60 minute counts'] 

しかし、私はどのようにわかりません実際の値を3行以上読み込む

import pandas as pd 
df0["time"] = pd.to_datetime(df0["time"]) 
df0["day"] = df0['time'].map(lambda x: x.day) 
df0["month"] = df0['time'].map(lambda x: x.month) 
df0["year"] = df0['time'].map(lambda x: x.year) 

は、その後、私は必要に:

Time StampValue()列のデータフレームdf0を定義した後、私は、コードを使用することができYYYY-MM-DDのようなフォーマットにTime Stampを変換する必要があります総DAIはその後

df1 = df0.groupby(['Value()', 'day', 'month', 'year'], as_index=False).sum() 

、最終的に私は、今年の毎日のための行を持つデータフレームを作成する必要があると:で、毎日の総雨量になるように60分間のカウント降雨を組み合わせ雨が降る。それは次のようになります。

Date Value 
2015-12-31 0 
2015-12-30 0 
2015-12-29 0 
2015-12-28 0 
2015-12-27 0.25 
2015-12-26 0 
2015-12-25 1.52 
2015-12-24 0 
2015-12-23 0 
2015-12-22 0 
2015-12-21 0 
2015-12-20 0 
2015-12-19 0 
2015-12-18 0 
2015-12-17 0.25 
2015-12-16 7.62 

...とそう

に、それは全体のファイルを投稿すると便利だと私はDropboxのリンクを追加できるなら、私に教えてください。

答えて

2

あなたがresampleを必要とするようだ:

Grouper
df0.index = pd.to_datetime(df0["Time Stamp"]) 

df1 = df0.resample('D')['Value()'].sum().fillna(0).reset_index() 
print (df1) 
    Time Stamp Value() 
0 2015-12-15  0.25 
1 2015-12-16  7.61 
2 2015-12-17  0.25 
3 2015-12-18  0.00 
4 2015-12-19  0.00 
5 2015-12-20  0.00 
6 2015-12-21  0.00 
7 2015-12-22  0.00 
8 2015-12-23  0.00 
9 2015-12-24  0.00 
10 2015-12-25  1.51 
11 2015-12-26  0.00 
12 2015-12-27  0.25 

またはgroupby

df0.index = pd.to_datetime(df0["Time Stamp"]) 

df1 = df0.groupby(pd.Grouper(freq='D'))['Value()'].sum().fillna(0).reset_index() 
print (df1) 
    Time Stamp Value() 
0 2015-12-15  0.25 
1 2015-12-16  7.61 
2 2015-12-17  0.25 
3 2015-12-18  0.00 
4 2015-12-19  0.00 
5 2015-12-20  0.00 
6 2015-12-21  0.00 
7 2015-12-22  0.00 
8 2015-12-23  0.00 
9 2015-12-24  0.00 
10 2015-12-25  1.51 
11 2015-12-26  0.00 
12 2015-12-27  0.25 

し、必要な追加sort_index場合:

df1 = df0.resample('D')['Value()'].sum().sort_index(ascending=False).fillna(0).reset_index() 
print (df1) 
    Time Stamp Value() 
0 2015-12-27  0.25 
1 2015-12-26  0.00 
2 2015-12-25  1.51 
3 2015-12-24  0.00 
4 2015-12-23  0.00 
5 2015-12-22  0.00 
6 2015-12-21  0.00 
7 2015-12-20  0.00 
8 2015-12-19  0.00 
9 2015-12-18  0.00 
10 2015-12-17  0.25 
11 2015-12-16  7.61 
12 2015-12-15  0.25 


df1 = df0.groupby(pd.Grouper(freq='D'))['Value()'].sum() 
     .sort_index(ascending=False).fillna(0).reset_index() 
print (df1) 
    Time Stamp Value() 
0 2015-12-27  0.25 
1 2015-12-26  0.00 
2 2015-12-25  1.51 
3 2015-12-24  0.00 
4 2015-12-23  0.00 
5 2015-12-22  0.00 
6 2015-12-21  0.00 
7 2015-12-20  0.00 
8 2015-12-19  0.00 
9 2015-12-18  0.00 
10 2015-12-17  0.25 
11 2015-12-16  7.61 
12 2015-12-15  0.25 
+0

おめでとう!!!!!!! – piRSquared

+0

@piRSquared - ありがとうございます。 100k;) – jezrael

+0

Nice @jezrael :)エクセルファイルのタブ'60分カウント 'からデータをPythonのデータフレームに取り込む最善の方法についてコメントできますか? – JAG2024

関連する問題