MCPcopy Create free account
hub / github.com/dask/dask / _nonempty_index

Function _nonempty_index

dask/dataframe/backends.py:380–451  ·  view source on GitHub ↗
(idx)

Source from the content-addressed store, hash-verified

378
379@meta_nonempty.register(pd.Index)
380def _nonempty_index(idx):
381 typ = type(idx)
382 if typ is pd.RangeIndex:
383 return pd.RangeIndex(2, name=idx.name, dtype=idx.dtype)
384 elif is_any_real_numeric_dtype(idx):
385 return typ([1, 2], name=idx.name, dtype=idx.dtype)
386 elif typ is pd.DatetimeIndex:
387 start = "1970-01-01"
388 # Need a non-monotonic decreasing index to avoid issues with
389 # partial string indexing see https://github.com/dask/dask/issues/2389
390 # and https://github.com/pandas-dev/pandas/issues/16515
391 # This doesn't mean `_meta_nonempty` should ever rely on
392 # `self.monotonic_increasing` or `self.monotonic_decreasing`
393 try:
394 return pd.date_range(
395 start=start,
396 periods=2,
397 freq=idx.freq,
398 tz=idx.tz,
399 name=idx.name,
400 unit=idx.unit,
401 )
402 except ValueError: # older pandas versions
403 data = [start, "1970-01-02"] if idx.freq is None else None
404 return pd.DatetimeIndex(
405 data, start=start, periods=2, freq=idx.freq, tz=idx.tz, name=idx.name
406 )
407 elif typ is pd.PeriodIndex:
408 return pd.period_range(
409 start="1970-01-01", periods=2, freq=idx.freq, name=idx.name
410 )
411 elif typ is pd.TimedeltaIndex:
412 start = np.timedelta64(1, "D")
413 try:
414 return pd.timedelta_range(
415 start=start, periods=2, freq=idx.freq, name=idx.name
416 )
417 except ValueError: # older pandas versions
418 start = np.timedelta64(1, "D")
419 data = [start, start + 1] if idx.freq is None else None
420 return pd.TimedeltaIndex(
421 data, start=start, periods=2, freq=idx.freq, name=idx.name
422 )
423 elif typ is pd.CategoricalIndex:
424 if len(idx.categories) == 0:
425 data = pd.Categorical(_nonempty_index(idx.categories), ordered=idx.ordered)
426 else:
427 data = pd.Categorical.from_codes(
428 [-1, 0], categories=idx.categories, ordered=idx.ordered
429 )
430 return pd.CategoricalIndex(data, name=idx.name)
431 elif typ is pd.MultiIndex:
432 levels = [_nonempty_index(l) for l in idx.levels]
433 codes = [[0, 0] for i in idx.levels]
434 try:
435 return pd.MultiIndex(levels=levels, codes=codes, names=idx.names)
436 except TypeError: # older pandas versions
437 return pd.MultiIndex(levels=levels, labels=codes, names=idx.names)

Callers 1

_nonempty_seriesFunction · 0.85

Calls 2

typenameFunction · 0.90

Tested by

no test coverage detected