KeyError:0熊猫
我需要帮助。我试图过滤掉并写入另一个csv文件,该文件由elapsed_seconds列中的10769s之后收集的数据以及加速度大小组成。但是,我得到KeyError异常:0 ...那我收到KeyError:0熊猫
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
改变这一行
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)
它不会't work ...它会产生另一组错误... raise KeyError('%s not in index'%objarr [mask]) KeyError:'[0.20489437 0.21313549 0.22022774 ...,1.53666405 1.31770629 \ n 1.55170659]不在索引' – user2995019
@ user2995019,检查更新。 – MedAli
Index([u't',u'x',u'y',u'z',u'm',u'datetime',u'elapsed_seconds'],dtype ='object') – user2995019
这是相当明显的是,你的数据帧没有一个叫做'0'列。然而'data [data.elapsed_seconds> 10769] [i]'当'i == 0'时选择列'0'。另外,它看起来像你正在写一个无限循环... – IanS
谢谢你的澄清。我可以知道如何初始化第一行数据[data.elapsed_seconds> 10769]是第一行? – user2995019
明白了。试试'data [data.elapsed_seconds> 10769] .iloc [i]',这会选择第一行。 – IanS