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