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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

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

Q&A

解決済

1回答

2705閲覧

Python3.7 時系列 秒単位dataを分単位ごとに抽出 → 実効値計算したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2020/10/18 08:57

前提・実現したいこと

python にて 秒単位の時系列データを 一分毎のRMSを計算したいと考えております。

resampleを使用し60秒ごとの sum,meanは可能でしたが RMSはできませんでした。

解決したい事、1分ごとにdataを抽出してRMS計算をしたい。
dataは 毎回60秒あると限らないのでdataを順番にデータ数で抽出だと目的にそぐわない

print(dfdf.resample('60s').sum())  については 上手くできました。
print(np.sqrt(np.square(dfdf.resample('60s')).mean()))  が上手くいきませんでした。

for文とかを使うと良いのでしょうか?
やり方にこだわりはありません。
プログラミング初心者のため 質問の仕方も不明点あるかと思いますが。宜しくお願い致します。

df dataは 以下になります
DATE_TIME         グラム値
2018/3/3 0:00:32 1.65
2018/3/3 0:00:33 8.76
2018/3/3 0:00:34 9.46
2018/3/3 0:00:35 5.86
2018/3/3 0:00:36 6.73
2018/3/3 0:00:37 8.34
2018/3/3 0:00:38 9.43
2018/3/3 0:00:39 8.46
2018/3/3 0:00:40 6.77
2018/3/3 0:00:41 7.622142857
2018/3/3 0:00:42 7.543452381
2018/3/3 0:00:43 7.464761905
2018/3/3 0:00:44 7.386071429
2018/3/3 0:00:45 7.307380952
2018/3/3 0:00:46 7.228690476
2018/3/3 0:00:47 7.15
2018/3/3 0:00:48 7.071309524
2018/3/3 0:00:49 6.992619048
2018/3/3 0:00:50 6.913928571
2018/3/3 0:00:51 6.835238095
2018/3/3 0:00:52 6.756547619
2018/3/3 0:00:53 6.677857143
2018/3/3 0:00:54 6.599166667
2018/3/3 0:00:55 6.52047619
2018/3/3 0:00:56 6.441785714
2018/3/3 0:00:57 6.363095238
2018/3/3 0:00:58 6.284404762
2018/3/3 0:00:59 6.205714286
2018/3/3 0:01:00 6.12702381
2018/3/3 0:01:01 6.048333333
2018/3/3 0:01:02 5.969642857
2018/3/3 0:01:03 5.890952381
2018/3/3 0:01:04 5.812261905
2018/3/3 0:01:05 5.733571429
2018/3/3 0:01:06 5.654880952
2018/3/3 0:01:07 5.576190476
2018/3/3 0:01:08 5.4975
2018/3/3 0:01:09 5.418809524
2018/3/3 0:01:10 5.340119048
2018/3/3 0:01:11 5.261428571
2018/3/3 0:01:12 5.182738095
2018/3/3 0:01:13 5.104047619
2018/3/3 0:01:14 5.025357143
2018/3/3 0:01:15 4.946666667
2018/3/3 0:01:32 4.86797619
2018/3/3 0:01:33 4.789285714
2018/3/3 0:01:34 4.710595238
2018/3/3 0:01:35 4.631904762
2018/3/3 0:01:36 8.46
2018/3/3 0:01:37 6.77
2018/3/3 0:01:38 7.622142857
2018/3/3 0:01:39 7.543452381
2018/3/3 0:01:40 7.464761905
2018/3/3 0:01:41 7.386071429
2018/3/3 0:01:42 7.307380952
2018/3/3 0:01:43 7.228690476
2018/3/3 0:01:44 3.923690476
2018/3/3 0:01:45 3.845
2018/3/3 0:01:46 3.766309524
2018/3/3 0:01:47 3.687619048
2018/3/3 0:01:48 3.608928571
2018/3/3 0:01:49 3.530238095
2018/3/3 0:01:50 3.451547619
2018/3/3 0:01:51 8.46
2018/3/3 0:01:52 6.77
2018/3/3 0:01:53 7.622142857
2018/3/3 0:01:54 7.543452381
2018/3/3 0:01:55 7.464761905
2018/3/3 0:01:56 7.386071429
2018/3/3 0:01:57 7.307380952
2018/3/3 0:01:58 7.228690476
2018/3/3 0:01:59 4.789285714
2018/3/3 0:02:00 4.710595238
2018/3/3 0:02:01 4.631904762
2018/3/3 0:02:02 8.46
2018/3/3 0:02:03 6.77
2018/3/3 0:02:04 7.6221
2018/3/3 0:02:07 6.7795
2018/3/3 0:02:08 6.360595238
2018/3/3 0:02:09 5.941666667
2018/3/3 0:02:25 5.522738095
2018/3/3 0:02:26 5.103809524
2018/3/3 0:02:27 4.684880952
2018/3/3 0:02:28 4.265952381
2018/3/3 0:02:29 7.543452381
2018/3/3 0:02:30 7.464761905
2018/3/3 0:02:31 7.386071429

発生している問題・エラーメッセージ

Traceback (most recent call last): File "<ipython-input-172-34e99fcee3ec>", line 1, in <module> print(np.sqrt(np.square(tr.resample('60s')).mean())) TypeError: unsupported operand type(s) for *: 'Timestamp' and 'Timestamp'

該当のソースコード

python dfdf = pd.read_csv(df, header = 0, infer_datetime_format = True, engine = 'python') dfdf['DATE_TIME']=pd.to_datetime(dfdf['DATE_TIME'],format='%Y-%m-%d %H:%M:%S') dfdf.set_index('DATE_TIME', inplace=True) print(dfdf.resample('60s').sum()) print(np.sqrt(np.square(dfdf.resample('60s')).mean()))

試したこと

以下も 試しましたが Errorが出てしまいました。
v = dfdf.resample('60s')

Error
<pandas.core.resample.DatetimeIndexResampler object at 0x0000020852243CC8>

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

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

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

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

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

guest

回答1

0

ベストアンサー

たとえば、CSVファイルが以下の形式だとすると、

CSV

1DATE_TIME,グラム値 22018/3/3 0:00:32,1.65 32018/3/3 0:00:33,8.76 4(中略) 52018/3/3 0:02:30,7.464761905 62018/3/3 0:02:31,7.386071429

次のようにresampleしてからapplyでRMSのラムダ式を与えれば計算できます。

Python

1import pandas as pd 2import numpy as np 3 4df = pd.read_csv("resample.csv", parse_dates=['DATE_TIME'], index_col=['DATE_TIME']) 5# print(df) 6 7# print(df.resample('60s').sum()) 8print(df.resample('60s').apply(lambda x: np.sqrt((x ** 2).sum() / x.size)))

result

1 グラム値 2DATE_TIME 32018-03-03 00:00:00 7.162014 42018-03-03 00:01:00 6.026190 52018-03-03 00:02:00 6.349508

投稿2020/10/18 14:44

Daregada

総合スコア11990

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

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

退会済みユーザー

退会済みユーザー

2020/10/18 15:27

早速 ありがとうございます! 数日間 悩み続け勇気をもって質問させて頂きました! for ループも回さずにできるのですね。 以前 上から60個ずつ forループを回していったら 欠損していた時間があり  ずれていってしまったことがありました。 勉強になります。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問