@@ -67,7 +67,11 @@ def _as_dataframe(self, multi_index=True):
67
67
else :
68
68
raise TypeError ("This result type is not implemented." )
69
69
70
- self ._format_timestamp (result_df )
70
+ time_columns = result_df .columns .intersection (
71
+ ["timestamp" , "fromTimestamp" , "toTimestamp" ]
72
+ )
73
+ result_df [time_columns ] = result_df [time_columns ].apply (self ._format_timestamp )
74
+
71
75
if multi_index :
72
76
self ._set_index (result_df , groupby_names )
73
77
@@ -110,37 +114,17 @@ def _as_geodataframe(
110
114
"This result type cannot be converted to a GeoPandas GeoDataFrame object."
111
115
)
112
116
113
- if "@validFrom" in features .columns :
114
- features ["@validFrom" ] = pd .to_datetime (
115
- features ["@validFrom" ].str .replace ("Z" , "" ), format = "ISO8601"
116
- )
117
- features ["@validTo" ] = pd .to_datetime (
118
- features ["@validTo" ].str .replace ("Z" , "" ), format = "ISO8601"
119
- )
120
- if multi_index :
121
- features = features .set_index (["@osmId" , "@validFrom" , "@validTo" ])
122
- elif "@snapshotTimestamp" in features .columns :
123
- features ["@snapshotTimestamp" ] = pd .to_datetime (
124
- features ["@snapshotTimestamp" ].str .replace ("Z" , "" ), format = "ISO8601"
125
- )
126
- if multi_index :
127
- features = features .set_index (["@osmId" , "@snapshotTimestamp" ])
128
- elif (
129
- "timestamp" in features .columns and "groupByBoundaryId" in features .columns
130
- ):
131
- features ["timestamp" ] = pd .to_datetime (
132
- features ["timestamp" ].str .replace ("Z" , "" ), format = "ISO8601"
133
- )
134
- if multi_index :
135
- features = features .set_index (["groupByBoundaryId" , "timestamp" ])
136
- elif "@timestamp" in features .columns :
137
- features ["@timestamp" ] = pd .to_datetime (
138
- features ["@timestamp" ].str .replace ("Z" , "" ), format = "ISO8601"
139
- )
140
- if multi_index :
141
- features = features .set_index (["@timestamp" ])
142
- else :
143
- raise TypeError ("This result type is not implemented." )
117
+ time_columns = ["@validFrom" , "@validTo" , "@snapshotTimestamp" , "@timestamp" ]
118
+ existing_time_columns = features .columns .intersection (time_columns )
119
+ features [existing_time_columns ] = features [existing_time_columns ].apply (
120
+ self ._format_timestamp
121
+ )
122
+
123
+ if multi_index :
124
+ index_columns = features .columns .intersection (
125
+ ["@osmId" ] + time_columns
126
+ ).to_list ()
127
+ features = features .set_index (index_columns )
144
128
145
129
return features .sort_index ()
146
130
@@ -192,20 +176,7 @@ def _create_groupby_dataframe(self, data, groupby_names) -> DataFrame:
192
176
record_dfs .extend (record_result )
193
177
return pd .DataFrame ().from_records (record_dfs )
194
178
195
- def _format_timestamp (self , result_df : DataFrame ) -> None :
196
- """
197
- Format timestamp column as datetime
198
- :param result_df:
199
- :return:
200
- """
201
- if "timestamp" in result_df .columns :
202
- result_df ["timestamp" ] = pd .to_datetime (
203
- result_df ["timestamp" ].str .replace ("Z" , "" ), format = "ISO8601"
204
- )
205
- else :
206
- result_df ["fromTimestamp" ] = pd .to_datetime (
207
- result_df ["fromTimestamp" ].str .replace ("Z" , "" ), format = "ISO8601"
208
- )
209
- result_df ["toTimestamp" ] = pd .to_datetime (
210
- result_df ["toTimestamp" ].str .replace ("Z" , "" ), format = "ISO8601"
211
- )
179
+ @staticmethod
180
+ def _format_timestamp (dt : pd .Series ) -> pd .Series :
181
+ """Format timestamp column as datetime."""
182
+ return pd .to_datetime (dt .str .replace ("Z" , "" ), format = "ISO8601" )
0 commit comments