2017-07-19 11 views
1

複数の.csvファイルの各セルを平均化して、Pandasを使用して1つの平均.csvファイルとしてエクスポートしようとしています。一意のインデックスオブジェクトでのみ有効なインデキシング:Pandas DataFrame Panel

は、私がデータフレーム自体を作成し、問題がないが、私はパネル(すなわちpanel=pd.Panel(dataFrame))にそれを回すしようとすると、私はエラーを取得:InvalidIndexError: Reindexing only valid with uniquely valued Index objects pandas pd.panel

各csvファイルがどのように見えるかの例を:

Year, Month, Day, Latitude, Longitude, Value1, Value 2 
2010, 06, 01,  23,  97,  1,  3.5 
2010, 06, 01,  24,  97,  5,  8.2 
2010, 06, 01,  25,  97,  6,  4.6 
2010, 06, 01,  26,  97,  4,  2.0 

各.csvファイルはグリッド化されたデータから得られ、行数と列数が同じで、データ値がありません(値は-999.9です)。これは私のコードスニペットがアドレスするアドレスです。

私はこれを行うには、これまで持っているコードは次のとおりです。

june=[]  
for csv1 in glob.glob(path+'\\'+'*.csv'): 
     if csv1[-10:-8] == '06': 
      june.append(csv1) 
      dfs={i: pd.DataFrame.from_csv(i) for i in june} 
      panel=pd.Panel(dfs) 
      panels=panel.replace(-999.9,np.NaN) 
      dfs_mean=panels.mean(axis=0) 

私は、ユーザーが同じエラーを取得しているが、これらの質問のためのソリューションは、私では動作していないような質問を見てきました問題。これを修正する助けや、より良いアプローチのためのアイデアは非常に高く評価されます。

+0

は、各ファイルが同じ年、月、日の含まれていレベル以上の平均値を取りますか?それらの平均も同様にしたいですか? – piRSquared

+0

各ファイルは1日分(各.csvで同じ年、月、日)ですが、すべてのファイルが保存されているフォルダには1年分のファイルがすべて含まれています(2010年、2011年などのフォルダがあります)。 。) – glayne

答えて

0

pd.Panel has been deprecated
使用pd.concatと1

df1 = pd.concat({f: pd.read_csv(f) for f in glob('meansample[0-9].csv')}) 
df1.mean(level=1) 

    Year Month Day Latitude Longitude Value1 Value 2 
0 2010  6  1   23   97  1  3.5 
1 2010  6  1   24   97  5  8.2 
2 2010  6  1   25   97  6  4.6 
3 2010  6  1   26   97  4  2.0 
+0

これは正しい平均値のためのノーダータ値(与えられた値-999.9)を考慮に入れてマイナーチェンジしてくれました。 (path + '\\' + '*。csv')}) 'f 'の場合のfのpd.read_csv(f、na_values = [ - 999.9])は、 – glayne

0

私はアプローチを少し変更するよう提案しています。各DFをパネルに変換するのではなく、1つの大きなDFに連結するだけですが、それぞれに固有のIDを与えます。 IDでgroupbyを実行した後、mean()を使用して結果を得ることができます。

それは、次のようになります。

import Pandas as pd 

df = pd.DataFrame() 
for csv1 in glob.glob(path+'\\'+'*.csv'): 
    if csv1[-10:-8] == '06': 
     temp_df = pd.read_csv(csv1) 
     temp_df['df_id'] = csv1 
     df = pd.concat([df, temp_df]) 
df.replace(-999.9, np.nan) 
df = df.groupby("df_id").mean() 

を、私はあなたはまだそれは私が知っているように問題を持っている場合、それは、何とか助けたいと考えています。辞書理解と

関連する問題