#実現したいこと
CSVファイルを読み込んだ後、B列とC列をユーザ入力で日付と時間を指定してX軸に、ユーザ入力でD列とE列に適切な値を入力してJ列以降のデータ列をY軸に当て、最後は以上の条件に当てはまったX軸,Y軸のグラフを出力させたい。
#問題点
input()関数を使用してユーザ入力を試みましたが、入力した文字列・値とCSVファイルの照合が出来ませんでした。グラフの行列ラベルとユーザ入力で指定した文字列・数値を一致させる方法がわかりませんので、ご教授をお願い致します。
#使用環境
Python3.X
Jupyter Notebook
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
入力した値をdatetimeオブジェクトとして処理できれば、後はマスクを作って抽出することができます。
python
1import pandas as pd 2import datetime 3 4N = 10000 5base = datetime.datetime.today().replace(microsecond=0) 6date_list = [base - datetime.timedelta(hours=x) for x in range(0, N*5, 5)][::-1] 7date_date = [str(d.date()) for d in date_list] 8date_time = [str(d.time()) for d in date_list] 9df = pd.DataFrame(columns=['Date', 'ClockTime', 'target']) 10df['Date'] = date_date 11df['ClockTime'] = date_time 12df['target'] = np.random.rand(N) 13print(df.head()) 14''' 15 Date ClockTime target 160 2012-03-09 13:22:15 0.525087 171 2012-03-09 18:22:15 0.242866 182 2012-03-09 23:22:15 0.720774 193 2012-03-10 04:22:15 0.168702 204 2012-03-10 09:22:15 0.216134 21''' 22 23tdf = df['Date'] + ' ' + df['ClockTime'] 24tdf = pd.to_datetime(tdf) 25df['DateTime'] = tdf 26print(df.head()) 27''' 28 Date ClockTime target DateTime 290 2012-03-09 13:22:15 0.525087 2012-03-09 13:22:15 301 2012-03-09 18:22:15 0.242866 2012-03-09 18:22:15 312 2012-03-09 23:22:15 0.720774 2012-03-09 23:22:15 323 2012-03-10 04:22:15 0.168702 2012-03-10 04:22:15 334 2012-03-10 09:22:15 0.216134 2012-03-10 09:22:15 34''' 35 36mask = ((datetime.datetime.now() - 37 datetime.timedelta(days=10))< tdf) & (tdf < datetime.datetime.now()) 38print(df[mask].head()) 39''' 40 Date ClockTime target DateTime 419952 2017-11-11 21:22:15 0.523548 2017-11-11 21:22:15 429953 2017-11-12 02:22:15 0.797870 2017-11-12 02:22:15 439954 2017-11-12 07:22:15 0.777698 2017-11-12 07:22:15 449955 2017-11-12 12:22:15 0.020755 2017-11-12 12:22:15 459956 2017-11-12 17:22:15 0.390619 2017-11-12 17:22:15 46''' 47print(df[mask].tail()) 48''' 49 Date ClockTime target DateTime 509995 2017-11-20 20:23:27 0.419750 2017-11-20 20:23:27 519996 2017-11-21 01:23:27 0.738802 2017-11-21 01:23:27 529997 2017-11-21 06:23:27 0.113842 2017-11-21 06:23:27 539998 2017-11-21 11:23:27 0.025397 2017-11-21 11:23:27 549999 2017-11-21 16:23:27 0.361001 2017-11-21 16:23:27 55'''
投稿2017/11/21 07:24
総合スコア8560
0
ベストアンサー
df.loc
にて複数の列の値をand条件にて行を抽出する例です。
行の絞り条件をユーザーが入力するものと解釈しました。
なお、Date
,ClockTime
については日時として扱った方が範囲指定など利用しやすいため、その例も示しています。
Python
1import numpy as np 2import pandas as pd 3from io import StringIO 4 5s = """ 6xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 70 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 81 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 92 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 103 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 114 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 125 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 13""" 14df = pd.read_csv( StringIO(s), sep=" ", skipinitialspace=True) 15#print(df) 16 17# Date,ClockTimeは文字列、motion_type,speed_settingは数値として一致判定して行を抽出 18inp_Date = '2017/8/24' 19inp_ClockTime = '00:00.0' 20inp_mt = 0 21inp_ss = 0 22 23df_sel = df.loc[(df['Date']==inp_Date) & (df['ClockTime']==inp_ClockTime) & (df['motion_type']==inp_mt) & (df['speed_setting']==inp_ss)] 24print(df_sel[['Nom','Date','ClockTime','motion_type','speed_setting']]) 25 26# 日付と時刻を'DateTime'列にまとめ、日時の範囲で抽出 27 28df['DateTime'] = pd.to_datetime( df['Date'] + ' ' + df['ClockTime']) 29 30inp_date_st = pd.to_datetime('2017/8/24 01:00:00') 31inp_date_ed = pd.to_datetime('2017/8/25 00:00:00') 32 33df_sel = df.loc[(df['DateTime'] >= inp_date_st) & (df['DateTime'] < inp_date_ed)] 34print(df_sel[['Nom','Date','ClockTime']])
投稿2017/11/21 07:03
編集2017/11/21 07:21総合スコア38266
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/21 08:11