以前,下記のsample.csvというファイルにおいて,特定の行(google.com)を中心に前後t秒間を抽出したいという質問をしました.
date_time info client IP query
0 1604223469 info: client 10.3.10.202 yahoo.com
1 1604223469 info: client 10.3.10.202 hogehoge.com
2 1604223470 info: client 10.3.10.202 fugafuga.com
3 1604223471 info: client 10.3.10.202 japan.com
4 1604223471 info: client 10.3.10.202 google.com
5 1604223471 info: client 10.3.10.202 fire.com
6 1604223472 info: client 10.3.10.202 super.com
7 1604223472 info: client 10.3.10.202 domain.com
8 1604223472 info: client 10.3.10.202 spanixh.com
9 1604223472 info: client 10.3.10.202 amazon.com
10 1604223473 info: clinet 10.3.10.202 docomo.com
11 1604223473 info: client 10.3.10.202 softbank.com
12 1604223474 info: client 10.3.10.202 google.com
13 1604223474 info: client 10.3.10.202 csv.com
14 1604223475 info: client 10.3.10.202 python.com
動作に関しては,下記のプログラムを動作させることが出来ました.
import pandas as pd
from io import StringIO
from datetime import datetime, timedelta
df = pd.read_csv('sample.csv',sep=' ')
df['date_time'] = pd.to_datetime(df['date_time'], unit='s')
base = pd.to_datetime(df[df['query'] == 'google.com']['date_time'].values[0])
delta = timedelta(seconds=1)
st, ed = base - delta, base + delta
mask = (df['date_time'] >= st) & (df['date_time'] <= ed)
ret = df[mask]
print(ret)
結果は以下のように出力されました.ただ,google.comを発見したら動作を終了してしまうので,”google.comを見つけるごとに動作を行うようにさせたい”です.
そのために,ループ処理を用いて,プログラムの8行目のvalues[]の[]の値を変数iとして0から1ずつ更新していこうと考えています.ただ,pythonのpandasでそのような動作は可能でしょうか?可能であれば,アドバイスを頂けると幸いです.
date_time info client IP query
2 2020-11-01 09:37:50 info: client 10.3.10.202 fugafuga.com
3 2020-11-01 09:37:51 info: client 10.3.10.202 japan.com
4 2020-11-01 09:37:51 info: client 10.3.10.202 google.com
5 2020-11-01 09:37:51 info: client 10.3.10.202 fire.com
6 2020-11-01 09:37:52 info: client 10.3.10.202 super.com
7 2020-11-01 09:37:52 info: client 10.3.10.202 domain.com
8 2020-11-01 09:37:52 info: client 10.3.10.202 spanixh.com
9 2020-11-01 09:37:52 info: client 10.3.10.202 amazon.com
あなたの回答
tips
プレビュー