[英]creating dictionary of dataframes within for-loop throws AssertionError [Pandas for Python]
我正在嘗試從充滿csv文件的文件夾構建一組數據幀。 我首先使用以下for循環創建數據幀字典
mydir = os.getcwd()
pdatahistorypath = os.path.join(mydir, pdatahistoryfolder)
currentcsvfilenames = os.listdir(pdatahistorypath)
dframes = {}
for filey in currentcsvfilenames:
thispath = os.path.join(pdatahistorypath, filey)
sitedata = pd.read_csv(thispath, header=4)
sitedata = sitedata.drop('Unnamed: 16', axis=1) # drops waste column
sitedata['Date'] = pd.to_datetime(sitedata['Date'])
sitedata.index = sitedata['Date'] # reasign the index to the date column
dframes[filey[:-4]] = sitedata
然后我將它們拉入面板
mypanel = pd.Panel(dframes) # create panel
在該面板中,我拉出最早的日期和最新的日期,將最早的日期四舍五入到最接近的20分鍾,並以20分鍾的間隔為該時間跨度創建一個DateTimeIndex
first_date = mypanel.major_axis[0]
last_date = mypanel.major_axis[-1] # the very last date in series
multiplier = (1e9)*60*20 # round (floor) to 20 minute interval
t3 = first_date.value - first_date.value % multiplier
idx = pd.date_range(t3, last_date, freq="20min")
df = dframes['Naka-1.csv']
然后,我試圖將我不定期加時間戳的數據重新索引到我之前創建的20分鍾間隔系列idx
df2 = df.reindex(idx)
問題是,我收到以下錯誤
Traceback (most recent call last):
File "C:/Users/ble1usb/Dropbox/Git/ers-dataanalyzzer/pandasdfmaker.py", line 50, in <module>
df2 = df.reindex(idx)#, method=None)#, method='pad', limit=None) # reindex to the datetimeindex built from first/last dates
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2625, in reindex
fill_value, limit, takeable)
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2707, in _reindex_index
copy, fill_value)
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2723, in _reindex_with_indexers
fill_value=fill_value)
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 1985, in reindex_indexer
return BlockManager(new_blocks, new_axes)
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 1001, in __init__
self._verify_integrity()
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 1236, in _verify_integrity
raise AssertionError("Block ref_items must be BlockManager "
AssertionError: Block ref_items must be BlockManager items
在調試這個問題時,我發現以下工作正常。 我試圖重新創建我能想到的所有差異,但缺少在循環內部創建的數據幀
dframes = {}
dfpath = 'C:\Users\\ble1usb\Dropbox\Git\ers-dataanalyzzer\datahistoryPandas\Naka-1.csv'
sitedata = pd.read_csv(dfpath, header=4)
sitedata = sitedata.drop('Unnamed: 16', axis=1) # drops waste column
sitedata['Date'] = pd.to_datetime(sitedata['Date'])
sitedata.index = sitedata['Date'] # reasign the index to the date column
dframes['Naka-1'] = sitedata
dframes['myOtherSite'] = sitedata[sitedata['Out ppm'] > 3]
mypanel = pd.Panel(dframes)
first_date = mypanel.major_axis[0]
last_date = mypanel.major_axis[-1] # the very last date in series
multiplier = (1e9)*60*20 # round (floor) to 20 minute interval
t3 = first_date.value - first_date.value % multiplier
idx = pd.date_range(t3, last_date, freq="20min")
df = dframes['Naka-1.csv']
df2 = df.reindex(idx)
這是上一個代碼塊的輸出(我正在舍入一些數據,稍后再解決)
>> print df2.tail(15)
Date Status Alarms Present RPM Hours Oil Pres. Out ppm Ratio In Out Inlet psi Bag psi Disch. psi Hi Pres Coolant Temp Comm
2013-12-10 16:40:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 17:00:00 2013-12-10 17:00:00 Running none 2,820 9,384 53 0 0 469 473 5.56 0.72 268.1 0 1 Normal
2013-12-10 17:20:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 17:40:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 18:00:00 2013-12-10 18:00:00 Running none 2,820 9,385 54 0 0 462 470 12.28 0.82 259.1 0 1 Normal
2013-12-10 18:20:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 18:40:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 19:00:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 19:20:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 19:40:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 20:00:00 2013-12-10 20:00:00 Running none 2,880 9,387 55 0 0 450 456 10.91 0.73 249.9 0 1 Normal
2013-12-10 20:20:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 20:40:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2013-12-10 21:00:00 2013-12-10 21:00:00 Running none 2,820 9,388 54 0 0 440 449 8.16 0.62 243.1 0 1 Normal
2013-12-10 21:20:00 NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
因此,我知道它應該正常工作。 我想不出任何其他會導致此斷言錯誤的原因。
有什么我可以嘗試的嗎?
您應該使用重新采樣,而不是使用date_range重新編制索引:
idx = pd.date_range(t3, last_date, freq="20min")
df2 = df.reindex(idx)
可能是:
df.resample('20min', 'last')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.