前提・実現したいこと
3つのCVSファイルを読み込んで、7データごとに移動平均を求めて、その値が1.0以下である回数を数えます。
その数が多い順に辞書をソートして、キーリストを表示するプログラムを作成したいです。
発生している問題・エラーメッセージ
プログラマを作ることはできたのですが、ソートを実行する際にエラーが表示されています。
このエラーを解消することができなくて困っています。
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
該当のソースコード
Python
1import pandas as pd 2 3CITY_LABEL=['takamatsu','naha','wakkanai'] 4CITY_NAME=['高松','那覇','稚内'] 5 6# CSVファイルを読み込み,データフレームに変換する 7def get_dataframe_city(_label): 8 datadir='./data/' 9 return pd.read_csv(datadir+'weather_'+_label+'.csv') 10 11 12def sort(dictionary): #大きい順に値をソートして、キーのみを返す関数 13 sorted_items = sorted(dictionary.items(), key=lambda x: x[1], reverse=True) 14 sorted_keys = [x[0] for x in sorted_items] 15 return sorted_keys 16 17 18window = 7 #移動平均区間 19 20data_takamatsu = (df[CITY_NAME[0]].loc[:,["降水量の合計"]].rolling(window).mean() <= 1.0) 21data_takamatsu.sum() #高松の降水量の合計の移動平均が1mm以下の回数を数える 22 23data_takamatsu = (df[CITY_NAME[1]].loc[:,["降水量の合計"]].rolling(window).mean() <= 1.0) 24data_naha.sum() #那覇の降水量の合計の移動平均が1mm以下の回数を数える 25 26data_takamatsu = (df[CITY_NAME[2]].loc[:,["降水量の合計"]].rolling(window).mean() <= 1.0) 27data_wakkanai.sum() #稚内の降水量の合計の移動平均が1mm以下の回数を数える 28 29rain_amount = {CITY_NAME[0]:data_takamatsu.sum(),CITY_NAME[1]:data_naha.sum(),CITY_NAME[2]:data_wakkanai.sum()} #各場所の雨が降らなかった日の数の辞書 30 31sort(rain_amount)
試したこと
関数は、辞書型の値の型が'numpy.float64'のときは正常に動作したのですが、
data_takamatsu.sum() , data_naha.sum() , data_wakkanai.sum()
のデータ型が'pandas.core.series.Series'となっているから正常に動作していないのだとは分かりました。
型変換で、.astype('float64')を行っても、エラーは表示されました。
また、エラーコードを検索して、内容を調べたのですが、
・条件式の書き方が誤っている → 条件式は1つしかないので、おそらく関係ない
・真理値の値が曖昧である → 対策方法が分からない
ということが分かりました。
補足情報(FW/ツールのバージョンなど)
jupiter notebook , pandasを使用しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。