Сообщить об ошибке.

Метод .truncate() объектов Series/DataFrame в pandas

Усекает данные до и после некоторого значения индекса

Синтаксис:

s = Series.truncate(before=None, after=None, copy=None)

df = DataFrame.truncate(before=None, after=None, axis=None, copy=None)

Параметры:

  • before=None - обрезает все строки до этого значения индекса.
  • after=None - обрезает все строки после этого значения индекса.
  • axis=None - ось для усечения. Принимает значения: 0 или 'index' для строк и 1 или 'columns' для столбцов. По умолчанию усекает индекс (строки). Для Series этот аргумент не используется и по умолчанию равен 0.
  • copy=None - возвращает копию усеченных данных.

    Примечание: ключевой аргумент copy изменит поведение в pandas 3.0. Копирование при записи будет включено по умолчанию, а это означает, что все методы с аргументом copy будут использовать механизм отложенного копирования. Ключевой аргумент copy будет удален в будущей версии pandas.

Вы уже можете получить будущее поведение и улучшения, включив копирование при записи pd.options.mode.copyonwrite = True

Возвращаемое значение:

Описание:

Методы Series.truncate() и DataFrame.truncate() модуля pandas усекают Series или DataFrame до и после некоторого значения индекса. Это полезное сокращение для логической индексации на основе значений индекса выше или ниже определенных пороговых значений.

Если усекаемый индекс содержит только представления "datetime" pandas, то before и after могут быть указаны в виде строк даты/времени вместо меток даты/времени.

Примеры использования DataFrame.truncate():

>>> import pandas as pd
df = pd.DataFrame({'A': ['a', 'b', 'c', 'd', 'e'],
                   'B': ['f', 'g', 'h', 'i', 'j'],
                   'C': ['k', 'l', 'm', 'n', 'o']},
                  index=[1, 2, 3, 4, 5])
>>> df
#    A  B  C
# 1  a  f  k
# 2  b  g  l
# 3  c  h  m
# 4  d  i  n
# 5  e  j  o

>>> df.truncate(before=2, after=4)
#    A  B  C
# 2  b  g  l
# 3  c  h  m
# 4  d  i  n

Обрезаем столбцы DataFrame.

>>> df.truncate(before="A", after="B", axis="columns")
#    A  B
# 1  a  f
# 2  b  g
# 3  c  h
# 4  d  i
# 5  e  j

Для Series. можно обрезать только строки.

>>> df['A'].truncate(before=2, after=4)
# 2    b
# 3    c
# 4    d
# Name: A, dtype: object

Значения индекса могут быть представлениями "datetime" библиотеки pandas или датами в виде строк.

Значения индекса, как представления "datetime" библиотеки pandas

>>> dates = pd.date_range('2016-01-01', '2016-02-01', freq='s')
>>> df = pd.DataFrame(index=dates, data={'A': 1})
>>> df.tail()
#                      A
# 2016-01-31 23:59:56  1
# 2016-01-31 23:59:57  1
# 2016-01-31 23:59:58  1
# 2016-01-31 23:59:59  1
# 2016-02-01 00:00:00  1

# передаем представления "datetime" библиотеки `pandas`
>>> df.truncate(before=pd.Timestamp('2016-01-05'),
...             after=pd.Timestamp('2016-01-10')).tail()
#                      A
# 2016-01-09 23:59:56  1
# 2016-01-09 23:59:57  1
# 2016-01-09 23:59:58  1
# 2016-01-09 23:59:59  1
# 2016-01-10 00:00:00  1

Так как индекс представляет собой DatetimeIndex, содержащий только даты, то можно указать аргументы before и after в виде строк даты и времени. Перед обрезанием они будут принудительно преобразованы в метки даты/времени.

# передаем строки в виде даты
>>> df.truncate('2016-01-05', '2016-01-10').tail()
#                      A
# 2016-01-09 23:59:56  1
# 2016-01-09 23:59:57  1
# 2016-01-09 23:59:58  1
# 2016-01-09 23:59:59  1
# 2016-01-10 00:00:00  1

Обратите внимание, что усечение DatetimeIndex предполагает значение 0 (полночь) для любого неуказанного компонента даты. Это отличается от частичного среза строк, который возвращает любые частично совпадающие даты. Подробнее, о чем речь, в описании объекта DatetimeIndex.

>>> df.loc['2016-01-05':'2016-01-10', :].tail()
#                      A
# 2016-01-10 23:59:55  1
# 2016-01-10 23:59:56  1
# 2016-01-10 23:59:57  1
# 2016-01-10 23:59:58  1
# 2016-01-10 23:59:59  1