2323 os .mkdir (f"{ CURRENT_DIR } /covidcast_result" )
2424
2525
26- def _parse_datetimes (df : pd .DataFrame , col : str , time_type : str , date_format : str = "%Y%m%d" ) -> pd .DataFrame :
26+ def _parse_datetimes (df : pd .DataFrame , col : str , date_format : str = "%Y%m%d" ) -> pd .Series :
2727 """Convert a DataFrame date or epiweek column into datetimes.
2828
2929 Assumes the column is string type. Dates are assumed to be in the YYYYMMDD
3030 format by default. Weeks are assumed to be in the epiweek CDC format YYYYWW
3131 format and return the date of the first day of the week.
3232 """
33- if time_type == "day" :
34- df [col ] = pd .to_datetime (df [col ], format = date_format )
35- return df
36- if time_type == "week" :
37- df [col ] = df [col ].apply (lambda x : Week (int (x [:4 ]), int (x [- 2 :])).startdate ())
38- df [col ] = pd .to_datetime (df [col ])
39- return df
40- raise ValueError (f"Unknown time_type: { time_type } " )
41-
33+ df [col ] = df [col ].astype ("str" )
34+ def parse_row (row ):
35+ if row ["time_type" ] == "day" :
36+ return pd .to_datetime (row [col ], format = date_format )
37+ if row ["time_type" ] == "week" :
38+ return pd .to_datetime (Week (int (row [col ][:4 ]), int (row [col ][- 2 :])).startdate ())
39+ return row [col ]
40+ return df .apply (parse_row , axis = 1 )
4241
4342
4443def ported_metadata () -> Union [pd .DataFrame , None ]:
@@ -56,9 +55,8 @@ def ported_metadata() -> Union[pd.DataFrame, None]:
5655 raise RuntimeError ("Error when fetching metadata from the API" , response ["message" ])
5756
5857 df = pd .DataFrame .from_dict (response ["epidata" ])
59- time_type = df ["time_type" ].values [0 ]
60- df = _parse_datetimes (df , "time_value" , time_type )
61- df = _parse_datetimes (df , "issue" , time_type )
58+ df ["min_time" ] = _parse_datetimes (df , "min_time" )
59+ df ["max_time" ] = _parse_datetimes (df , "max_time" )
6260 df ["last_update" ] = pd .to_datetime (df ["last_update" ], unit = "s" )
6361 return df
6462
@@ -139,8 +137,8 @@ def ported_signal(
139137 api_df = pd .DataFrame .from_dict (response ["epidata" ])
140138 if not api_df .empty :
141139 time_type = api_df ["time_type" ].values [0 ]
142- api_df = _parse_datetimes (api_df , "time_value" , time_type )
143- api_df = _parse_datetimes (api_df , "issue" , time_type )
140+ api_df [ "time_value" ] = _parse_datetimes (api_df , "time_value" )
141+ api_df [ "issue" ] = _parse_datetimes (api_df , "issue" )
144142 api_df .drop ("direction" , axis = 1 , inplace = True )
145143 api_df ["data_source" ] = data_source
146144 api_df ["signal" ] = signal
0 commit comments