pandas.DataFrame.truncate#

DataFrame.truncate(before=None, after=None, axis=None, copy=<no_default>)[source] #

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

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

Deprecated since version 3.0.0.

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

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
On this page

This Page