gpt4 book ai didi

python - Pandas Timedelta 属性 (_m, _s) : odd behaviour

转载 作者:行者123 更新时间:2023-12-04 08:29:47 25 4
gpt4 key购买 nike

我目睹了一些奇怪的行为 访问属性 _m_s来自 Pandas timedelta 对象 .
让我用一个最小的例子来解释这个问题,我从 PyCharm 的控制台运行(PyCharm 2020.2.3(社区版))

>>> import pandas as pd
>>> #  Creating a dataFrame with 2 pandas timedeltas:
... df_test=pd.DataFrame({"Timedeltas":[pd.Timedelta('1 days 1:01:01'), pd.Timedelta('2 days 2:02:02')]})
Timedelta('0 days 00:02:56.230217907')
>>> mean_timedelta=df_test['Timedeltas'].mean()
... print(mean_timedelta._m)
0
>>> mean_timedelta=df_test['Timedeltas'].mean()
... print(mean_timedelta)
... print(mean_timedelta._m)
1 days 13:31:31.500000
31
  • 为什么我第一次执行时没有打印 31 print(mean_timedelta._m) ?为什么我会收到 0反而?
  • 为什么只有当我运行时才打印 31 print(mean_timedelta)前?
  • 最佳答案

    mean_timedeltaTimedelta 类型的对象.通过赋值创建对象时,不会填充对象的属性。您可以通过访问属性 _is_populated 来检查它。 .
    当您第一次使用 print(mean_timedelta) 打印整个对象时,属性在内部填充。这就是为什么您可以访问诸如 _m 之类的属性的原因。 :

    mean_timedelta=df_test['Timedeltas'].mean()
    print(mean_timedelta.is_populated)
    print(mean_timedelta)
    print(mean_timedelta.is_populated)
    print(mean_timedelta._m)
    print(mean_timedelta.is_populated)
    输出:
    False
    1 days 13:31:31.500000
    True
    31
    True
    我的回答是基于 source code of the class .
    要故意填充它,您可以调用:
    mean_timedelta._ensure_components()
    如果您需要以其他方式获取 session 记录,您可以执行以下操作:
    print((mean_timedelta.seconds//60)%60)

    关于python - Pandas Timedelta 属性 (_m, _s) : odd behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65081978/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com