質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

4028閲覧

pythonでCSVファイルを、ユーザ入力で行・列指定について

bkts94441

総合スコア18

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2017/11/21 06:10

編集2018/01/23 07:56

#実現したいこと
CSVファイルを読み込んだ後、B列とC列をユーザ入力で日付と時間を指定してX軸に、ユーザ入力でD列とE列に適切な値を入力してJ列以降のデータ列をY軸に当て、最後は以上の条件に当てはまったX軸,Y軸のグラフを出力させたい。
#問題点
input()関数を使用してユーザ入力を試みましたが、入力した文字列・値とCSVファイルの照合が出来ませんでした。グラフの行列ラベルとユーザ入力で指定した文字列・数値を一致させる方法がわかりませんので、ご教授をお願い致します。

#使用環境
Python3.X
Jupyter Notebook

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず時間をまとめて、datetimeに変換します

入力した値を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

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bkts94441

2017/11/21 08:11

ご回答ありがとうございます。記述されたプログラム、ヒントを参考にプログラムを作成しようと思います。
guest

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
can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bkts94441

2017/11/21 08:08

ご回答ありがとうございます。記述されたプログラムを元に作成してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問