1
from pandas.core.daterange import DateRange
2
from pandas.core.datetools import bday
3
from pandas.core.index import Index, NULL_INDEX
4
from pandas.core.matrix import DataMatrix
5
from pandas.core.series import Series
6
from pandas.lib.tseries import map_indices
7
from copy import deepcopy
8
from datetime import datetime
9
from numpy import isnan, array, NaN, alltrue
10
from numpy import random
11
from random import choice
18
return ''.join([choice(string.letters + string.digits) for i in range(n)])
19
def equalContents(arr1, arr2):
20
"""Checks if the set of unique elements of arr1 and arr2 are equivalent.
22
return frozenset(arr1) == frozenset(arr2)
24
#-------------------------------------------------------------------------------
25
# DataMatrix test cases
27
class TestDataMatrix(unittest.TestCase):
29
index1 = DateRange(datetime(2008,4,22), periods=50)
30
index2 = DateRange(datetime(2008,4,29), periods=50)
31
index3 = DateRange(datetime(2008,4,28), periods=50)
32
ts1 = Series(random.random(50), index=index1)
33
ts2 = Series(random.random(50), index=index2)
34
ts3 = Series(random.random(50), index=index3)
35
ts4 = Series(random.random(50), index=index1)
36
data = {'col1' : ts1,'col2' : ts2,'col3' : ts3, 'col4' : ts4}
37
self.frame = DataMatrix(data=data, index=index3)
43
def testReindex(self):
44
newFrame = self.frame.reindex(self.ts1.index)
45
for col in newFrame.cols():
46
for idx, val in newFrame[col].iteritems():
47
if idx in self.frame.index:
49
self.assert_(isnan(self.frame[col][idx]))
51
self.assertEqual(val, self.frame[col][idx])
53
self.assert_(isnan(val))
54
for col, series in newFrame.iteritems():
55
self.assert_(equalContents(series.index, newFrame.index))
56
emptyFrame = self.frame.reindex(Index([]))
57
self.assert_(len(emptyFrame.index) == 0)
59
nonContigFrame = self.frame.reindex(self.ts1.index[::2])
60
for col in nonContigFrame.cols():
61
for idx, val in nonContigFrame[col].iteritems():
62
if idx in self.frame.index:
64
self.assert_(isnan(self.frame[col][idx]))
66
self.assertEqual(val, self.frame[col][idx])
68
self.assert_(isnan(val))
69
for col, series in nonContigFrame.iteritems():
70
self.assert_(equalContents(series.index, nonContigFrame.index))
73
shiftedFrame = self.frame.shift(5)
74
for i, idx in enumerate(shiftedFrame.index):
75
self.assert_(idx-5*bday == self.frame.index[i])
76
series = shiftedFrame['col1']
77
for i, idx in enumerate(series.index):
78
self.assert_(idx-5*bday == self.frame.index[i])
80
def testOperators(self):
81
garbage = random.random(4)
82
colSeries = Series(garbage, index=array(self.frame.cols()))
83
idSum = self.frame + self.frame
84
seriesSum = self.frame + colSeries
85
for col, series in idSum.iteritems():
86
for idx, val in series.iteritems():
87
origVal = self.frame[col][idx] * 2
89
self.assertEqual(val, origVal)
91
self.assert_(isnan(origVal))
92
for col, series in seriesSum.iteritems():
93
for idx, val in series.iteritems():
94
origVal = self.frame[col][idx] + colSeries[col]
96
self.assertEqual(val, origVal)
98
self.assert_(isnan(origVal))
101
"""Slicing NOT intended for production code"""
102
slice = self.frame[:20]
103
self.assertEqual(20, len(slice.index))
104
for col, series in slice.iteritems():
105
self.assertEqual(20, len(series.index))
106
self.assert_(equalContents(series.index, slice.index))
108
def testGetItem(self):
109
for key, value in self.frame._series.iteritems():
110
self.assert_(self.frame[key] is not None)
111
self.assert_('random' not in self.frame)
113
# def testGetRow(self):
114
# rowFrame = self.frame.getRow(self.frame.index[5])
115
# idx = rowFrame.index[0]
116
# self.assertEquals(idx, self.frame.index[5])
117
# for key, values in rowFrame.iteritems():
118
# self.assertEquals(self.frame[key][idx], values[0])
119
# self.assertEquals(self.frame[key][idx], values[idx])
122
frameSlice = self.frame.getTS(fromDate=self.frame.index[0], nPeriods=5)
123
stacked = frameSlice.stack()
124
for idx, value in stacked.iteritems():
125
date, col = idx.split(';')
126
date = datetime.fromordinal(int(date))
128
self.assert_(isnan(frameSlice[col][date]))
130
self.assertEquals(value, frameSlice[col][date])
132
unstacked = stacked.unstack().T
134
for i, idx in enumerate(unstacked.index):
135
self.assertEquals(idx, frameSlice.index[i])
136
for col, series in unstacked.iteritems():
137
for idx, value in series.iteritems():
139
self.assert_(isnan(frameSlice[col][idx]))
141
self.assertEquals(value, frameSlice[col][idx])
143
def testSetItem(self):
144
# not sure what else to do here
145
series = self.frame['col1']
146
self.frame['col5'] = series
147
self.assert_('col5' in self.frame)
149
def testStatistics(self):
150
sumFrame = self.frame.apply(np.sum)
151
for col, series in self.frame.iteritems():
154
print self.frame[col]
155
self.assertEqual(val, series.sum())
157
def testDelItem(self):
158
del self.frame['col1']
159
self.assert_('col1' not in self.frame)
160
self.assert_('col1' not in self.frame._series)
163
idx = self.frame.index[5]
164
xs = self.frame.getXS(idx)
165
for item, value in xs.iteritems():
167
self.assert_(isnan(self.frame[item][idx]))
169
self.assertEqual(value, self.frame[item][idx])
173
tsFrame = frame.getTS(fromDate=frame.index[5], nPeriods=5)
174
for i, idx in enumerate(tsFrame.index):
175
self.assertEqual(idx, frame.index[5+i])
176
for col, series in tsFrame.iteritems():
177
self.assertEqual(idx, series.index[i])
178
for col, series in frame.iteritems():
179
for idx, value in series.iteritems():
181
self.assert_(isnan(frame[col][idx]))
183
self.assertEqual(value, frame[col][idx])
185
def testTranspose(self):
188
for idx, series in dft.iteritems():
189
for col, value in series.iteritems():
191
self.assert_(isnan(frame[col][idx]))
193
self.assertEqual(value, frame[col][idx])
195
def testAsMatrix(self):
197
mat = frame.asMatrix()
198
smallerCols = ['col3', 'col1']
199
smallerMat = frame.asMatrix(smallerCols)
200
frameCols = frame.cols()
201
for i, row in enumerate(mat):
202
for j, value in enumerate(row):
205
self.assert_(isnan(frame[col][i]))
207
self.assertEqual(value, frame[col][i])
209
def testDeepcopy(self):
210
cp = deepcopy(self.frame)
213
for idx, value in series.iteritems():
214
self.assertNotEqual(self.frame['col1'][idx], value)
216
def testFilterItems(self):
219
def testGroupBy(self):
232
def testPickle(self):
235
def testToDictList(self):
238
def testDictToDataFrame(self):
241
def testDataFrameToDict(self):
244
def testFromDict(self):
245
newFrame = DataMatrix.fromDict(col1=self.ts1, col2 = self.ts2)
246
for idx in newFrame.index:
247
if idx in self.ts1.index:
248
self.assertEqual(newFrame['col1'][idx], self.ts1[idx])
249
if idx in self.ts2.index:
250
self.assertEqual(newFrame['col2'][idx], self.ts2[idx])
253
def testPreserveReferences(self):
256
def testCleanNaN(self):
259
if __name__ == '__main__':