MCPcopy Index your code
hub / github.com/pydata/xarray / _to_dataframe

Method _to_dataframe

xarray/core/dataset.py:7241–7298  ·  view source on GitHub ↗
(self, ordered_dims: Mapping[Any, int])

Source from the content-addressed store, hash-verified

7239 )
7240
7241 def _to_dataframe(self, ordered_dims: Mapping[Any, int]):
7242 from xarray.core.extension_array import PandasExtensionArray
7243
7244 # All and only non-index arrays (whether data or coordinates) should
7245 # become columns in the output DataFrame. Excluding indexes rather
7246 # than dims handles the case of a MultiIndex along a single dimension.
7247 columns_in_order = [k for k in self.variables if k not in self.xindexes]
7248 non_extension_array_columns = [
7249 k
7250 for k in columns_in_order
7251 if not pd.api.types.is_extension_array_dtype(self.variables[k].data) # noqa: TID251
7252 ]
7253 extension_array_columns = [
7254 k
7255 for k in columns_in_order
7256 if pd.api.types.is_extension_array_dtype(self.variables[k].data) # noqa: TID251
7257 ]
7258 extension_array_columns_different_index = [
7259 k
7260 for k in extension_array_columns
7261 if set(self.variables[k].dims) != set(ordered_dims.keys())
7262 ]
7263 extension_array_columns_same_index = [
7264 k
7265 for k in extension_array_columns
7266 if k not in extension_array_columns_different_index
7267 ]
7268 data = [
7269 self._variables[k].set_dims(ordered_dims).values.reshape(-1)
7270 for k in non_extension_array_columns
7271 ]
7272 index = self.coords.to_index([*ordered_dims])
7273 broadcasted_df = pd.DataFrame(
7274 {
7275 **dict(zip(non_extension_array_columns, data, strict=True)),
7276 **{
7277 c: self.variables[c].data
7278 for c in extension_array_columns_same_index
7279 },
7280 },
7281 index=index,
7282 )
7283 for extension_array_column in extension_array_columns_different_index:
7284 extension_array = self.variables[extension_array_column].data
7285 index = self[
7286 self.variables[extension_array_column].dims[0]
7287 ].coords.to_index()
7288 extension_array_df = pd.DataFrame(
7289 {extension_array_column: extension_array},
7290 index=pd.Index(index.array)
7291 if isinstance(index, PandasExtensionArray) # type: ignore[redundant-expr]
7292 else index,
7293 )
7294 extension_array_df.index.name = self.variables[extension_array_column].dims[
7295 0
7296 ]
7297 broadcasted_df = broadcasted_df.join(extension_array_df)
7298 return broadcasted_df[columns_in_order]

Callers 2

to_dataframeMethod · 0.95
to_dataframeMethod · 0.80

Calls 4

keysMethod · 0.80
set_dimsMethod · 0.80
to_indexMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected