@@ -124,35 +124,54 @@ def get_locations(self, t0_datetimes: pd.DatetimeIndex) -> Tuple[List[Number], L
124
124
Returns: list of x and y locations
125
125
126
126
"""
127
- # Pick a random GSP for each t0_datetime, and then grab
128
- # their geographical location.
129
- x_locations = []
130
- y_locations = []
127
+ total_gsp_nan_count = self .gsp_power .isna ().sum ().sum ()
128
+ if total_gsp_nan_count == 0 :
131
129
132
- # TODO: Issue 305: Speed up this function by removing this for loop?
133
- for t0_dt in t0_datetimes :
130
+ # get random GSP metadata
131
+ indexes = list (
132
+ self .rng .integers (low = 0 , high = len (self .metadata ), size = len (t0_datetimes ))
133
+ )
134
+ metadata = self .metadata .iloc [indexes ]
135
+
136
+ # get x, y locations
137
+ x_centers_osgb = list (metadata .location_x )
138
+ y_centers_osgb = list (metadata .location_y )
139
+
140
+ else :
141
+
142
+ logger .warning (
143
+ "There are some nans in the gsp data, "
144
+ "so to get x,y locations we have to do a big loop"
145
+ )
146
+
147
+ # Pick a random GSP for each t0_datetime, and then grab
148
+ # their geographical location.
149
+ x_centers_osgb = []
150
+ y_centers_osgb = []
151
+
152
+ for t0_dt in t0_datetimes :
134
153
135
- # Choose start and end times
136
- start_dt = self ._get_start_dt (t0_dt )
137
- end_dt = self ._get_end_dt (t0_dt )
154
+ # Choose start and end times
155
+ start_dt = self ._get_start_dt (t0_dt )
156
+ end_dt = self ._get_end_dt (t0_dt )
138
157
139
- # remove any nans
140
- gsp_power = self .gsp_power .loc [start_dt :end_dt ].dropna (axis = "columns" , how = "any" )
158
+ # remove any nans
159
+ gsp_power = self .gsp_power .loc [start_dt :end_dt ].dropna (axis = "columns" , how = "any" )
141
160
142
- # get random index
143
- random_gsp_id = self .rng .choice (gsp_power .columns )
144
- meta_data = self .metadata [(self .metadata ["gsp_id" ] == random_gsp_id )]
161
+ # get random index
162
+ random_gsp_id = self .rng .choice (gsp_power .columns )
163
+ meta_data = self .metadata [(self .metadata ["gsp_id" ] == random_gsp_id )]
145
164
146
- # Make sure there is only one GSP.
147
- # Sometimes there are multiple gsp_ids at one location e.g. 'SELL_1'.
148
- # TODO: Issue #272: Further investigation on multiple GSPs may be needed.
149
- metadata_for_gsp = meta_data .iloc [0 ]
165
+ # Make sure there is only one GSP.
166
+ # Sometimes there are multiple gsp_ids at one location e.g. 'SELL_1'.
167
+ # TODO: Issue #272: Further investigation on multiple GSPs may be needed.
168
+ metadata_for_gsp = meta_data .iloc [0 ]
150
169
151
- # Get metadata for GSP
152
- x_locations .append (metadata_for_gsp .location_x )
153
- y_locations .append (metadata_for_gsp .location_y )
170
+ # Get metadata for GSP
171
+ x_centers_osgb .append (metadata_for_gsp .location_x )
172
+ y_centers_osgb .append (metadata_for_gsp .location_y )
154
173
155
- return x_locations , y_locations
174
+ return x_centers_osgb , y_centers_osgb
156
175
157
176
def get_example (
158
177
self , t0_dt : pd .Timestamp , x_meters_center : Number , y_meters_center : Number
0 commit comments