前提
PythonでCSVファイルから読み取ったデータにFFTをかけたいです。
最終的にはFFTしたデータにある周波数以下を0にしてIFFTするいわゆるノイズ処理のようなことをしようと考えています。
今回ではCSVデータを読み取りいったんそのデータを表示、FFTをかけるところまでは上手くいったと思うのですが以下のようなエラーが発生しました。
実現したいこと
エラーの解決方法のご教授。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Input In [2], in <cell line: 5>() 3 """df=pd.read_csv('csv in/observationdata.csv',names=['time','voltage'])""" 4 df=pd.read_csv('csv in/observationdata.csv') ----> 5 df[(df["time"])] 6 t=df['time'] 7 f=df['voltage'] # 変更部分 File ~/miniforge3/envs/test1/lib/python3.9/site-packages/pandas/core/frame.py:3511, in DataFrame.__getitem__(self, key) 3509 if is_iterator(key): 3510 key = list(key) -> 3511 indexer = self.columns._get_indexer_strict(key, "columns")[1] 3513 # take() does not accept boolean indexers 3514 if getattr(indexer, "dtype", None) == bool: File ~/miniforge3/envs/test1/lib/python3.9/site-packages/pandas/core/indexes/base.py:5782, in Index._get_indexer_strict(self, key, axis_name) 5779 else: 5780 keyarr, indexer, new_indexer = self._reindex_non_unique(keyarr) -> 5782 self._raise_if_missing(keyarr, indexer, axis_name) 5784 keyarr = self.take(indexer) 5785 if isinstance(key, Index): 5786 # GH 42790 - Preserve name from an Index File ~/miniforge3/envs/test1/lib/python3.9/site-packages/pandas/core/indexes/base.py:5842, in Index._raise_if_missing(self, key, indexer, axis_name) 5840 if use_interval_msg: 5841 key = list(key) -> 5842 raise KeyError(f"None of [{key}] are in the [{axis_name}]") 5844 not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique()) 5845 raise KeyError(f"{not_found} not in index") KeyError: "None of [Float64Index([ 0.0, 5e-06, 1e-05, 1.5e-05, 2e-05, 2.5e-05,\n 3e-05, 3.5e-05, 4e-05, 4.5e-05,\n ...\n 5.242825, 5.24283, 5.242835, 5.24284, 5.242845, 5.24285,\n 5.242855, 5.24286, 5.242865, 5.24287],\n dtype='float64', length=1048575)] are in the [columns]"
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import csv 3import pandas as pd 4import numpy as np 5from scipy import signal 6 7N = 1048576 8dt = 0.000001 9"""df=pd.read_csv('csv in/observationdata.csv',names=['time','value'])""" 10df=pd.read_csv('csv in/observationdata.csv') 11t=df['time'] 12f=df['voltage'] # 変更部分 13F=np.fft.fft(f) 14F_abs=np.abs(F) 15F_abs_amp = F_abs / N * 2 # 交流成分はデータ数で割って2倍する 16F_abs_amp[0] = F_abs_amp[0] / 2 # 直流成分(今回は扱わないけど)は2倍不要 17 18#グラフ表示 19plt.xlabel('time(sec)', fontsize=14) 20plt.ylabel('voltage', fontsize=14) 21plt.plot(t, f) 22 23# 高速フーリエ変換(FFT) 24F = np.fft.fft(f) 25 26# FFTの複素数結果を絶対値に変換 27F_abs = np.abs(F) 28# 振幅をもとの信号に揃える 29F_abs_amp = F_abs / N * 2 # 交流成分はデータ数で割って2倍 30F_abs_amp[0] = F_abs_amp[0] / 2 # 直流成分(今回は扱わないけど)は2倍不要 31 32# 周波数軸のデータ作成 33fq = np.linspace(0, 1.0/dt, N) # 周波数軸 linspace(開始,終了,分割数) 34 35 36# グラフ表示(FFT解析結果) 37plt.xlabel('freqency(Hz)', fontsize=14) 38plt.ylabel('amplitude', fontsize=14) 39plt.plot(fq, F_abs_amp)
試したこと
ハイパスフィルタをかけてノイズを除去する方法は行いました。しかしFFTかけて特定のノイズを除去するという方法も確立しておきたいです。
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー