Skip to main content
`Ctrl`+`K`

# pandas.DataFrame.truncate

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

  Truncate a Series or DataFrame before and after some index value.

  This is a useful shorthand for boolean indexing based on index values above or below certain thresholds.

  Parameters:
    beforedate, str, int

      Truncate all rows before this index value.

    afterdate, str, int

      Truncate all rows after this index value.

    axis{0 or ‘index’, 1 or ‘columns’}, optional

      Axis to truncate. Truncates the index (rows) by default. For Series this parameter is unused and defaults to 0.

    copybool, default is True,

      Return a copy of the truncated section.

      Note

      The copy keyword will change behavior in pandas 3.0. Copy-on-Write will be enabled by default, which means that all methods with a copy keyword will use a lazy copy mechanism to defer the copy and ignore the copy keyword. The copy keyword will be removed in a future version of pandas.

      You can already get the future behavior and improvements through enabling copy on write `pd.options.mode.copy_on_write = True`

  Returns:
    type of caller

      The truncated Series or DataFrame.

  See also

  `DataFrame.loc`

    Select a subset of a DataFrame by label.

  `DataFrame.iloc`

    Select a subset of a DataFrame by position.

  Notes

  If the index being truncated contains only datetime values, before and after may be specified as strings instead of Timestamps.

  Examples

      >>> 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

  The columns of a DataFrame can be truncated.

      >>> 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

  For Series, only rows can be truncated.

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

  The index values in `truncate` can be datetimes or string dates.

      >>> 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

      >>> 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

  Because the index is a DatetimeIndex containing only dates, we can specify before and after as strings. They will be coerced to Timestamps before truncation.

      >>> 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

  Note that `truncate` assumes a 0 value for any unspecified time component (midnight). This differs from partial string slicing, which returns any partially matching dates.

      >>> 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