【问题标题】:Python: extracting datetime to year, month, and day result in floatPython:将日期时间提取到年、月和日的结果是浮点数
【发布时间】:2019-10-14 20:25:00
【问题描述】:

我的数据有一个类似2016-11-05 23:40:00datetime 索引。
我想将日期时间元素提取到年、月和日的三个新列中。我使用以下

import datetime as dt
df['year'] = df.index.year
df['month'] = df.index.month
df['day'] = df.index.day

但结果是浮动的

year    month   day
2016.0  11.0    5.0

我想要

year    month   day
2016    11      5

感谢您的帮助。

【问题讨论】:

  • .astype(int)..?

标签: python pandas datetime


【解决方案1】:

只需使用astype:

import datetime as dt
df['year'] = df.index.year.astype(int)
df['month'] = df.index.month.astype(int)
df['day'] = df.index.day.astype(int)

如果有nan的则使用errors参数:

df['year'] = df.index.year.astype(int, errors='ignore')

这将为具有空索引的列返回 nans

【讨论】:

  • 如果您的数据中有nans,这将失败,因此请确保先清理它。
  • 但是索引可以是nans吗?
  • 这将返回ValueError: Cannot convert NA to integer。索引中怎么可能是 NaN?
  • @Darina 显然索引可以有空值。
  • @MohitMotwani 带有错误参数,astype() got an unexpected keyword argument 'errors'
【解决方案2】:

我认为浮动的原因是缺少值,所以如果使用 pandas 0.24+ 是可能的,请使用 Nullable Integer Data Type:

df['year'] = df.index.year.astype('Int64')
df['month'] = df.index.month.astype('Int64')
df['day'] = df.index.day.astype('Int64')

【讨论】:

    【解决方案3】:

    或者如果你有很多列,最简单的可能是构建数据框的所有代码:

    df = df.astype(int)
    

    【讨论】:

      【解决方案4】:

      将其转换为 int

      import datetime as dt
      df['year'] = int(df.index.year)
      df['month'] = int(df.index.month)
      df['day'] = int(df.index.day)
      

      【讨论】:

      • 我试了一下,返回TypeError: int() argument must be a string, a bytes-like object or a number, not 'Float64Index'
      猜你喜欢
      • 2016-07-27
      • 2021-03-18
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2017-10-24
      • 2019-01-26
      • 2020-04-29
      相关资源
      最近更新 更多