pandas.DataFrame.truncate#

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

在某个索引值之前和之后截断一个 Series 或 DataFrame。

这是基于索引值高于或低于某些阈值进行布尔索引的有用简写。

参数:
之前日期, 字符串, 整数

在此索引值之前截断所有行。

之后日期, 字符串, 整数

截断此索引值之后的所有行。

{0 或 ‘index’, 1 或 ‘columns’}, 可选

要截断的轴。默认情况下截断索引(行)。对于 Series,此参数未使用并默认为 0。

复制bool, 默认是 False,

返回截断部分的副本。

备注

copy 关键字将在 pandas 3.0 中改变行为。写时复制 将被默认启用,这意味着所有带有 copy 关键字的方法将使用一种延迟复制机制来推迟复制并忽略 copy 关键字。copy 关键字将在 pandas 的未来版本中被移除。

通过启用写时复制 pd.options.mode.copy_on_write = True,您已经可以获得未来的行为和改进。

自 3.0.0 版本弃用.

返回:
调用者类型

被截断的 Series 或 DataFrame。

参见

DataFrame.loc

通过标签选择DataFrame的一个子集。

DataFrame.iloc

按位置选择DataFrame的一个子集。

备注

如果被截断的索引仅包含日期时间值,则可以将 beforeafter 指定为字符串而不是时间戳。

示例

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

对于系列,只能截断行。

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

truncate 中的索引值可以是日期时间或字符串日期。

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

因为索引是一个仅包含日期的 DatetimeIndex,我们可以将 beforeafter 指定为字符串。它们将在截断前被强制转换为时间戳。

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

注意 truncate 假设任何未指定的时间组件值为0(午夜)。这与返回任何部分匹配日期的部分字符串切片不同。

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