前提・実現したいこと
とある複数の工程表のExcelファイルを読み込んで、人別の工数推移をグラフ化する
ようなプログラムを書こうとしていました。簡単化すると下記のようになります。
excelファイル読み込み→人別に、時系列のデータに並べる(日別データ)→週別のデータにresampleして、グラフ化する。
イメージとしては下記のようなものです。(resample部分は図には書いてませんが…)
発生している問題・エラーメッセージ
実際にやってみると、下記エラーが出力されてしまいます。
resample '<' not supported between instances of 'str' and 'datetime.datetime'
いろいろ試してみたのですが解決せず、ここで質問させていただければと考えています。
→ソースコード内で、pandasのresampleを使っているのですが、どうも、pandas.read_excelを
やったときに、yyyy/mm/dd 00:00:00というデータと、yyyy/mm/dd 00:00:00.1のような
データが混在して取れていることが分かりました。(strとdatetimeが混在?)
質問したい内容は以下です。
①read_excelでexcelファイルを読み込んだ時、時系列のデータが、上記のように、
yyyy/mm/dd 00:00:00.1のようになる理由についてどのようなものがあるでしょうか。
(excelファイルの日付部分は、オートフィルで作っているもので、打ち間違いは
ありませんでした。)
②上記のようにindexのデータ型が混在した場合、resampleをきちんと動作させるには、
どのようにすればよいでしょうか。
なお、下記ソースコードは、indexにdatetimeと混在していると仮定したうえで何とか除去してresampleを動かそうとして、datetimeで統一させたいと思って作った部分です。
お忙しい中恐縮ですが、ご回答いただけましたら幸甚に存じます。
追記:①の原因自体はわかりました。実際のコード例では、headの部分に全く同じ日付があったため、あとに出てきた日付の分は、「.1」が付与されてしまい、
これを転置した時に型が混在してしまい、エラーになってしまうという症状のようでした…。
これを解決するのに下記のコードのように全部日付型に変換しようとするとエラーが発生しました…。
該当のソースコード(簡略化したもの。これで動かすと別のエラーが出る。)
python3
1 2import pandas as pd 3import numpy as np 4import re 5 6 7def shaping_datetime(s): 8 match = re.match("\d*/\d*/\d* \d*:\d*:\d*", s) 9 if match: 10 # print("マッチしたよ:{}".format(match.group(0))) 11 ret = match.group(0) 12 else: 13 # print("マッチしないよ") 14 ret = np.nan 15 return ret 16 17 18if __name__ == '__main__': 19 hoge = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 20 hoge.index = ["2019/9/20 00:00:00", "2019/9/21 00:00:00.1", "2019/9/23 01:22:15"] 21 lst = hoge.index.values.tolist() 22 tmp_list = list(map(str.strip, hoge.index.values)) 23 24 shaping_datetime(tmp_list[1]) 25 tmp_list = list(map(shaping_datetime, tmp_list)) 26 print(tmp_list) 27 28 hoge.index = tmp_list 29 hoge.resample('W') 30
試したこと
データの形を見直した
pandas周りのメソッドを検索し、いろいろ試してみた。
補足情報(FW/ツールのバージョンなど)
python 3.7.0
pandas 0.24.2
回答1件
あなたの回答
tips
プレビュー