1
+ from datetime import datetime
2
+
1
3
from django .test import TestCase
2
4
import pandas as pd
3
5
import numpy as np
4
6
import pickle
5
7
import django
8
+ from pandas .core .indexes .datetimes import bdate_range
9
+
6
10
from .models import (
7
11
DataFrame , WideTimeSeries , WideTimeSeriesDateField ,
8
12
LongTimeSeries , PivotData , Dude , Car , Spot
@@ -68,8 +72,28 @@ def unpivot(self, frame):
68
72
'date' : np .tile (np .array (frame .index ), K )}
69
73
return pd .DataFrame (data , columns = ['date' , 'variable' , 'value' ])
70
74
75
+ def _makeTimeDataFrame (self , n_rows : int ) -> pd .DataFrame :
76
+ # Beginning in 2.2 pandas._testing.makeTimeDataFrame was removed, however all that is required for the tests
77
+ # in this module is a dataframe with columns A, B, C, D of random values indexed by a DatetimeIndex.
78
+ data = {}
79
+ for c in ['A' , 'B' , 'C' , 'D' ]:
80
+ dt = datetime (2000 , 1 , 1 )
81
+ dr = bdate_range (dt , periods = n_rows , freq = 'B' , name = c )
82
+ pd .DatetimeIndex (dr , name = c )
83
+
84
+ data [c ] = pd .Series (
85
+ np .random .default_rng (2 ).standard_normal (n_rows ),
86
+ index = pd .DatetimeIndex (dr , name = c ),
87
+ name = c ,
88
+ )
89
+ return pd .DataFrame (data )
90
+
71
91
def setUp (self ):
72
- self .ts = tm .makeTimeDataFrame (100 )
92
+ if PANDAS_VERSIONINFO >= '2.2.0' :
93
+ self .ts = self ._makeTimeDataFrame (100 )
94
+ else :
95
+ self .ts = tm .makeTimeDataFrame (100 )
96
+
73
97
self .ts2 = self .unpivot (self .ts ).set_index ('date' )
74
98
self .ts .columns = ['col1' , 'col2' , 'col3' , 'col4' ]
75
99
create_list = []
@@ -87,9 +111,9 @@ def setUp(self):
87
111
col4 = cols ['col4' ]))
88
112
WideTimeSeriesDateField .objects .bulk_create (create_list )
89
113
90
- create_list = [LongTimeSeries (date_ix = r [ 0 ] , series_name = r [ 1 ] [0 ],
91
- value = r [ 1 ] [1 ])
92
- for r in self .ts2 .iterrows ()]
114
+ create_list = [LongTimeSeries (date_ix = timestamp , series_name = s . iloc [0 ],
115
+ value = s . iloc [1 ])
116
+ for timestamp , s in self .ts2 .iterrows ()]
93
117
94
118
LongTimeSeries .objects .bulk_create (create_list )
95
119
@@ -125,18 +149,24 @@ def test_longstorage(self):
125
149
126
150
def test_resampling (self ):
127
151
qs = LongTimeSeries .objects .all ()
128
- rs_kwargs = {'kind' : 'period' }
129
152
agg_args = None
130
153
agg_kwargs = None
131
154
if PANDAS_VERSIONINFO >= '0.25.0' :
132
155
agg_kwargs = {'func' : 'sum' }
133
156
else :
134
- agg_args = ['sum' ]
157
+ agg_args = ['sum' ]
158
+
159
+ if PANDAS_VERSIONINFO >= '2.2.0' :
160
+ freq = 'ME'
161
+ else :
162
+ freq = 'M'
163
+
135
164
df = qs .to_timeseries (index = 'date_ix' , pivot_columns = 'series_name' ,
136
165
values = 'value' , storage = 'long' ,
137
- freq = 'M' , rs_kwargs = rs_kwargs ,
166
+ freq = freq ,
138
167
agg_args = agg_args ,
139
168
agg_kwargs = agg_kwargs )
169
+ df .index = pd .PeriodIndex (df .index )
140
170
141
171
self .assertEqual ([d .month for d in qs .dates ('date_ix' , 'month' )],
142
172
df .index .month .tolist ())
@@ -147,9 +177,10 @@ def test_resampling(self):
147
177
qs2 = WideTimeSeries .objects .all ()
148
178
149
179
df1 = qs2 .to_timeseries (index = 'date_ix' , storage = 'wide' ,
150
- freq = 'M' , rs_kwargs = rs_kwargs ,
180
+ freq = freq ,
151
181
agg_args = agg_args ,
152
- agg_kwargs = agg_kwargs )
182
+ agg_kwargs = agg_kwargs )
183
+ df1 .index = pd .PeriodIndex (df1 .index )
153
184
154
185
self .assertEqual ([d .month for d in qs .dates ('date_ix' , 'month' )],
155
186
df1 .index .month .tolist ())
@@ -222,11 +253,10 @@ def setUp(self):
222
253
'value_col_d' : np .random .randn (11 ),
223
254
'value_col_e' : np .random .randn (11 ),
224
255
'value_col_f' : np .random .randn (11 )})
225
-
226
- create_list = [PivotData (row_col_a = r [1 ][0 ], row_col_b = r [1 ][1 ],
227
- row_col_c = r [1 ][2 ], value_col_d = r [1 ][3 ],
228
- value_col_e = r [1 ][4 ], value_col_f = r [1 ][5 ])
229
- for r in self .data .iterrows ()]
256
+ create_list = [PivotData (row_col_a = r .iloc [0 ], row_col_b = r .iloc [1 ],
257
+ row_col_c = r .iloc [2 ], value_col_d = r .iloc [3 ],
258
+ value_col_e = r .iloc [4 ], value_col_f = r .iloc [5 ])
259
+ for _ , r in self .data .iterrows ()]
230
260
231
261
PivotData .objects .bulk_create (create_list )
232
262
0 commit comments