2017-10-05 15 views
2

私は助けが必要です。私はフィルタリングし、別のcsvファイルに書き込むことを試みています。このファイルは、加速度の大きさと共にelapsed_secondsカラムで10769年以降に収集されたデータで構成されています。しかし、私はKeyError例外を取得しています:私は取得しています0 ...KeyError:0 Pandas

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data = pd.read_csv(accelDataPath) 
data.columns = ['t', 'x', 'y', 'z'] 

# calculate the magnitude of acceleration 
data['m'] = np.sqrt(data['x']**2 + data['y']**2 + data['z']**2) 

data['datetime'] = pd.DatetimeIndex(pd.to_datetime(data['t'], unit = 'ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')) 
data['elapsed_seconds'] = (data['datetime'] - data['datetime'].iloc[0]).dt.total_seconds() 
i=0 
csv = open("filteredData.csv", "w+") 
csv.write("Event at, Magnitude \n") 
while (i < len(data[data.elapsed_seconds > 10769])): 
    csv.write(str(data[data.elapsed_seconds > 10769][i]) + ", " + str(data[data.m][i]) + "\n") 
csv.close() 

エラーは次のとおりです。

Traceback (most recent call last): 
    File "C:\Users\Desktop\AnalyzingData.py", line 37, in <module> 
csv.write(str(data[data.elapsed_seconds > 10769][i]) + ", " + str(data[data.m][i]) + "\n") 
    File "C:\python\lib\site-packages\pandas\core\frame.py", line 1964, in __getitem__ 
    return self._getitem_column(key) 
    File "C:\python\lib\site-packages\pandas\core\frame.py", line 1971, in _getitem_column 
    return self._get_item_cache(key) 
    File "C:\python\lib\site-packages\pandas\core\generic.py", line 1645, in _get_item_cache 
    values = self._data.get(item) 
    File "C:\python\lib\site-packages\pandas\core\internals.py", line 3590, in get 
    loc = self.items.get_loc(item) 
    File "C:\python\lib\site-packages\pandas\core\indexes\base.py", line 2444, in get_loc 
    return self._engine.get_loc(self._maybe_cast_indexer(key)) 
    File "pandas\_libs\index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc (pandas\_libs\index.c:5280) 
     File "pandas\_libs\index.pyx", line 154, in pandas._libs.index.IndexEngine.get_loc (pandas\_libs\index.c:5126) 
     File "pandas\_libs\hashtable_class_helper.pxi", line 1210, in pandas._libs.hashtable.PyObjectHashTable.get_item (pandas\_libs\hashtable.c:20523) 
     File "pandas\_libs\hashtable_class_helper.pxi", line 1218, in pandas._libs.hashtable.PyObjectHashTable.get_item (pandas\_libs\hashtable.c:20477) 
    KeyError: 0 
+1

をそれはあなたのデータフレームが '0'と呼ばれる列を持っていないことは明白です。それでも 'data [data.elapsed_seconds> 10769] [i]'は 'i == 0 'のときに' 0'を選択します。また、あなたは無限ループを書いているようです。 – IanS

+1

説明をありがとうございます。データの最初の行[data.elapsed_seconds> 10769]が最初の行になるように初期化するにはどうすればよいでしょうか? – user2995019

+1

'data [data.elapsed_seconds> 10769] .iloc [i]'を試してください。これは最初の行を選択します。 – IanS

答えて

1

変更この行をこれに

csv.write(
    str(data[data.elapsed_seconds > 10769][i]) + ", " + str(data[data.m][i]) + "\n" 
    ) 

csv.write(
    str(data[data.elapsed_seconds > 10769].iloc[i]) + ", " + str(data[data.m].iloc[i]) +"\n" 
    ) 

また、増加していないことに注意してください。iは、このようにi += 1、whileループ内にあります。


または、より良い、次のようにdf.to_csvを使用します。

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data = pd.read_csv(accelDataPath) 
data.columns = ['t', 'x', 'y', 'z'] 

# calculate the magnitude of acceleration 
data['m'] = np.sqrt(data['x']**2 + data['y']**2 + data['z']**2) 

data['datetime'] = pd.DatetimeIndex(pd.to_datetime(data['t'], unit = 'ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')) 
data['elapsed_seconds'] = (data['datetime'] - data['datetime'].iloc[0]).dt.total_seconds() 

# write to csv using data.to_csv 
data[data.elapsed_seconds > 10769][['elapsed_seconds', 'm']].to_csv("filteredData.csv", 
      sep=",", 
      index=False) 
+0

それは別のエラーセットを生成します... raise KeyError( '%sはインデックス'%objarr [マスク]にありません) KeyError: '[0.20489437 0.21313549 0.22022774 ...、1.53666405 1.31770629 \ n 1.55170659]インデックスにはありません ' – user2995019

+0

@ user2995019、アップデートを確認してください。 – MedAli

+0

インデックス([u't '、u'x'、u'y '、u'z'、u'm '、u'datetime'、u'elapsed_seconds ']、dtype ='オブジェクト ') – user2995019

関連する問題