結論
reindexする前に、df.datatype
で形式を確認しよう。
indexの型がdate
と思っていたが、実はdate
ではなく、object
になっていた。そうすると、df.reindex
ではすべてのindexについて、fill_valueで指定した値に埋められてしまう。
今回はpandas.Seriesを、dataframe.groupby()
を使って作成したが、その処理の前に、groupby()
する対象のcolumnをpd.to_datetime()
を使ってdatetime型にしておくのが良い。
csvは以前datetimeのdtypeを持ったdataframeから作ったものだったので、read_csv()
で読み込んだ後にdtype
がobject
となっていることに気が付かなかった。
うまくいかない例
import pandas as pd
import seaborn as sns
df = pd.read_csv('some_kind_of.csv')
# csvの中身
# 日毎の発生件数をヒストグラムに表すのが今回の目的。
# ...
# 2018-02-01,ANAウイングス,ボンバルディア式DHC-8-402型,ANA331,中部国際空港,熊本空港,中部国際空港,上昇中、プロペラの除氷系統に不具合が発生したことを示すライトが点灯したため引き返した。,,2018,2
# 2018-02-04,日本エアコミューター,サーブ式SAAB340B型,JAC2321,大阪国際空港,但馬飛行場,大阪国際空港,上昇中、気流の擾乱により機体への荷重に係る運用限界一時的に超過した可能性があり、点検が必要となったため引き返した。,,2018,2
# 2018-02-05,全日本空輸,ボーイング式737-800型,ANA313,東京国際空港,富山空港,東京国際空港,上昇中、副操縦士席側前方の操縦室窓にひび割れが発生したため引き返した。,,2018,2
# ...
date_range = pd.date_range(start='2000-02-01', end='2024-03-31')
daily_count = df.groupby('発生日').count()['運航者']
daily_count = daily_count.reindex(date_range, fill_value=0)
この結果、daily_countとして、2000/2/1から2024/3/31まですべて0となるSeriesを得る。
うまくいく例
import pandas as pd
import seaborn as sns
df = pd.read_csv('some_kind_of.csv')
# csvの中身
# 日毎の発生件数をヒストグラムに表すのが今回の目的。
# ...
# 2018-02-01,ANAウイングス,ボンバルディア式DHC-8-402型,ANA331,中部国際空港,熊本空港,中部国際空港,上昇中、プロペラの除氷系統に不具合が発生したことを示すライトが点灯したため引き返した。,,2018,2
# 2018-02-04,日本エアコミューター,サーブ式SAAB340B型,JAC2321,大阪国際空港,但馬飛行場,大阪国際空港,上昇中、気流の擾乱により機体への荷重に係る運用限界一時的に超過した可能性があり、点検が必要となったため引き返した。,,2018,2
# 2018-02-05,全日本空輸,ボーイング式737-800型,ANA313,東京国際空港,富山空港,東京国際空港,上昇中、副操縦士席側前方の操縦室窓にひび割れが発生したため引き返した。,,2018,2
# ...
df['発生日'] = pd.to_datetime(df['発生日']) # この行を加える。
date_range = pd.date_range(start='2000-02-01', end='2024-03-31')
daily_count = df.groupby('発生日').count()['運航者']
daily_count = daily_count.reindex(date_range, fill_value=0)