【问题标题】:Python Pandas Datetime and dataframe indexing issuePython Pandas 日期时间和数据框索引问题
【发布时间】:2018-07-31 12:56:46
【问题描述】:

我有一个datetime 问题,我正在尝试匹配dataframe 以日期作为索引值。

例如,我有dr,它是numpy.datetime 的数组。

dr = [numpy.datetime64('2014-10-31T00:00:00.000000000'),
      numpy.datetime64('2014-11-30T00:00:00.000000000'),
      numpy.datetime64('2014-12-31T00:00:00.000000000'),
      numpy.datetime64('2015-01-31T00:00:00.000000000'),
      numpy.datetime64('2015-02-28T00:00:00.000000000'),
      numpy.datetime64('2015-03-31T00:00:00.000000000')]

然后我有 returndf 的数据框,日期作为索引值

print(returndf) 
             1    2    3    4    5    6    7    8    9    10
10/31/2014  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
11/30/2014  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

请忽略缺失值

每当我尝试匹配dr 和数据框returndf 中的日期时,使用以下代码仅1 个月returndf.loc[str(dr[1])]
我收到一个错误

KeyError: 'the label [2014-11-30T00:00:00.000000000] is not in the [index]'

如果有人能帮助我将numpy.datetime64('2014-10-31T00:00:00.000000000') 转换为10/31/2014 以便我可以将其与数据框索引值匹配,我将不胜感激。

谢谢,

【问题讨论】:

标签: python pandas


【解决方案1】:
  1. returndf 的索引不是DatetimeIndex。 Make是这样的:

    returndf = returndf.set_index(pd.to_datetime(returndf.index))
    
  2. 您的 dr 是 Numpy datetime64 对象的列表。这让我很困扰:

    dr = pd.to_datetime(dr)
    
  3. 您的样本数据清楚地表明returndf 的索引不包括dr 中的所有项目。在这种情况下,请使用reindex

    returndf.reindex(dr)
    
                 1   2   3   4   5   6   7   8   9  10
    2014-10-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2014-11-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2014-12-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2015-01-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2015-02-28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    2015-03-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
    

【讨论】:

  • 这很有帮助。但我对日期时间有点困惑。以下是变量 dr data_date = pd.to_datetime(testdf["Date"], format ="%m/%d/%Y") df=sorted(data_date.unique()) data_date 之前的步骤似乎是正确的,但为什么使用 sorted 和 unique 将 df 转换为 datetime64?
  • 你有几件事情发生在那里。 sorted 是一个 python 函数并返回一个列表。另外,你有df = sorted(data_date.unique())unique() 方法将返回一个 numpy 数组。更不用说甚至不知道data_date 是什么。那不是你原来的问题。下一步:您不要在数据帧上调用pd.to_datetime,除非该数据帧具有专门命名的列,并且如果它确实具有这些列,则不需要使用format 参数。如果您想要更清楚,请发布一个新问题。 cmets 中没有足够的空间。
猜你喜欢
  • 2017-04-16
  • 2019-03-16
  • 1970-01-01
  • 2021-02-18
  • 2014-03-07
  • 2023-03-09
  • 2021-08-14
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多