【问题标题】:Pandas dataframe issue with dates not staying consistent日期不一致的 Pandas 数据框问题
【发布时间】:2016-05-31 07:46:18
【问题描述】:

如果不显示发生了什么,就很难解释。基本上看来,当我尝试从数据框中提取索引时,最后一个值没有附带。

我正在使用 pandas 数据框作为初学者。

我的第一个数据框是

daily_stock_values                
             SPY    AAPL
2011-01-05  123.83  332.57
2011-01-06  123.59  332.30
2011-01-07  123.35  334.68
2011-01-10  123.19  340.99
2011-01-11  123.63  340.18
2011-01-12  124.74  342.95
2011-01-13  124.54  344.20
2011-01-14  125.44  346.99
2011-01-18  125.65  339.19
2011-01-19  124.42  337.39
2011-01-20  124.26  331.26

当我运行print daily_stock_values时我明白了

所以我的下一步是只获取 SPY 值。对于这种情况,它没有任何区别,但我的代码是这样的

daily_spy=daily_stock_values['SPY']
print daily_spy

结果是

    daily_spy  
2011-01-05    123.83
2011-01-06    123.59
2011-01-07    123.35
2011-01-10    123.19
2011-01-11    123.63
2011-01-12    124.74
2011-01-13    124.54
2011-01-14    125.44
2011-01-18    125.65
2011-01-19    124.42
2011-01-20    124.26

我的下一步是从 daily_spy 中提取日期,但无论出于何种原因,我都无法获得最后一个日期。每当我提取索引值(即日期)时,它都会提取除最后一个之外的所有内容。我尝试了两种方法来获取日期。

d = [i for i in daily_spy.index.values]
print "d ",d

[numpy.datetime64('2011-01-04T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-05T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-06T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-09T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-10T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-11T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-12T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-13T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-17T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-18T19:00:00.000000000-0500'), 
numpy.datetime64('2011-01-19T19:00:00.000000000-0500')]

我并不关心这里的格式,因为 2011-01-20 不在此列表中。

我也只是做了简单的 for 循环,它也没有显示出来。任何想法为什么?

【问题讨论】:

  • 您的日期时间看起来有一些时区信息,而且您会注意到您的第一个索引值也有偏移,所以我认为您没有遗漏任何值,只是日期时间有一个时区
  • 老实说,我没有注意到这一点。但是为什么会随机倒退一天呢?
  • 这不是随机的,您的时区表明他们在 -5 UTC(可能是纽约)所以 19:00 -5 UTC 小时会在第二天
  • 好的,但是如果您看到daily_stock_values,可以说它是父母,它只有一个日期......所以为什么它会改变。
  • 可能是因为它为了您的方便而打印得很漂亮,因为显示完整值会有点太多,所以它转换为 UTC 以便有意义,这也解释了为什么它不显示时间组件,因为 19:00 -5 小时变为 00:00,默认情况下,如果它们是 00:00,则不会显示时间

标签: python python-2.7 pandas


【解决方案1】:

我最终找到了解决问题的方法。通过Convert numpy.datetime64 to string object in python

基本上我转了

d = [i for i in daily_spy.index.values]

进入

d = [pd.to_datetime(str(i)) for i in daily_spy.index.get_values()]

然后从日期字符串中删除我不需要的信息。感谢您让我走上正确的道路!

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2015-08-13
    • 2020-10-29
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多