【问题标题】:AttributeError: 'TimedeltaProperties' object has no attribute 'years' in PandasAttributeError:“TimedeltaProperties”对象在 Pandas 中没有属性“年”
【发布时间】:2015-09-06 03:33:38
【问题描述】:

在 Pandas 中,为什么 TimedeltaProperties 对象没有“年”属性?

毕竟datetime 对象有这个属性。

对于一个与时间有关的对象来说,拥有似乎是一件很自然的事情。特别是如果它已经具有小时、秒等属性。

是否有一种解决方法,以便我的专栏充满像
10060 days,
可以换算成年吗?或者更好,只是转换为整数表示多年?

【问题讨论】:

  • 因为一年的天数并不是一个准确的数值。
  • datetime 没有 years 属性。它有一个year 属性,因为说一个特定的日期时间是在 2009 年很简单,而且大多是明确定义的。要说一个特定的持续时间是多少年并不那么简单。一年是365天吗? 366?我们是否应该跟踪 timedelta 何时开始和结束以做出决定?
  • 即使f["age_diff"] = f["date2"] - f["date1"],Pandas 也不够聪明,无法计算出这是多少年(浮点数)?
  • 还要注意TimedeltaProperties 没有这样的属性的原因是因为pd.Timedeltadatetime.timedelta 对象(第一个是第二个的子类)没有这样的属性。这确实是出于上述原因。

标签: python datetime pandas


【解决方案1】:

TimedeltaProperties 没有 yearmonth 属性,因为根据 TimedeltaProperties source code 。它是-

Series 值的 datetimelike 属性的访问器对象。

但是,monthsyears 没有常量定义。

1 month 可以根据month 本身的不同而不同的天数,例如一月 -> 31 天,四月 -> 30 天等。

1 month 也可以根据年份取不同的值(如果是 2 月份),如果年份是 2004 年,二月有 29 天,如果年份是 2003 年,二月有 28 天,等等。

years 也是如此,它可以根据确切的年份采用不同的值,例如 - 如果年份是 2003 ,它有 365 天,如果年份是 2004 ,它有 366 天。

因此,类似的要求 - 将 10060 days 转换为 years 是不准确的,years?

如前所述,那些没有的年份的准确数量。对应的天数取决于这些天所代表的实际年份。

【讨论】:

    【解决方案2】:

    这种解决方法让您更接近。

    round((df["Accident Date"] - df["Iw Date Of Birth"]).dt.days / 365, 1)

    【讨论】:

      【解决方案3】:

      我使用 .astype('timedelta64[Y]') 然后 .astype('int') 来获得整数年:

      df['age'] = (pd.Timestamp('now') - df.birthDate).astype('timedelta64[Y]').astype('int')
      

      输出:

      nflId   height  weight  birthDate   collegeName           position  displayName    age
      0   2539334 72  190 1990-09-10      Washington              CB  Desmond Trufant    30
      1   2539653 70  186 1988-11-01      Southeastern Louisiana  CB  Robert Alford      31
      2   2543850 69  186 1991-12-18      Purdue                  SS  Ricardo Allen      28
      3   2555162 73  227 1994-11-04      Louisiana State         MLB Deion Jones        25
      4   2555255 75  232 1993-07-01      Minnesota               OLB DeVondre Campbell  27
      

      【讨论】:

        猜你喜欢
        • 2020-09-28
        • 2017-02-12
        • 1970-01-01
        • 2019-07-19
        • 2020-06-14
        • 2019-07-03
        • 1970-01-01
        • 2017-03-14
        • 2019-09-25
        相关资源
        最近更新 更多