【问题标题】:Getting error slicing time series with pandas使用 pandas 获取错误切片时间序列
【发布时间】:2018-01-10 18:09:32
【问题描述】:

我正在尝试对时间序列进行切片,我可以通过这种方式完美地做到这一点:

subseries = series['2015-07-07 01:00:00':'2015-07-07 03:30:00'] .

但是下面的代码不起作用

def GetDatetime():

    Y = int(raw_input("Year "))
    M = int(raw_input("Month "))
    D = int(raw_input("Day "))
    d = datetime.datetime(Y, M, D) #creates a datetime object
    return d

filePath = "pathtofile.csv"
series = pd.read_csv(str(filePath), index_col='date') 
series.index = pd.to_datetime(series.index, unit='s')

d = GetDatetime()
f = GetDatetime()

subseries = series[d:f]

最后一行产生这个错误:

Traceback (most recent call last):
  File "dontgivemeerrorsbrasommek.py", line 37, in <module>
    brasla7nina= df[d:f]
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 1952, in __getitem__
    indexer = convert_to_index_sliceable(self, key)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/indexing.py", line 1896, in convert_to_index_sliceable
    return idx._convert_slice_indexer(key, kind='getitem')
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/indexes/base.py", line 1407, in _convert_slice_indexer
    indexer = self.slice_indexer(start, stop, step, kind=kind)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/indexes/datetimes.py", line 1515, in slice_indexer
    return Index.slice_indexer(self, start, end, step, kind=kind)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/indexes/base.py", line 3350, in slice_indexer
    kind=kind)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/indexes/base.py", line 3538, in slice_locs
    start_slice = self.get_slice_bound(start, 'left', kind)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.20.2-py2.7-linux-x86_64.egg/pandas/core/indexes/base.py", line 3487, in get_slice_bound
    raise err
KeyError: 1435802520000000000

我认为这是一个时间戳转换问题,所以我尝试了以下方法,但仍然无法正常工作:

d3 = pandas.Timestamp(datetime(Y, M, D, H, m))
d2 = pandas.to_datetime(d)

您的帮助将不胜感激,谢谢。 :)

【问题讨论】:

  • 您引用的错误行 (subseries= df[d:f]) 没有出现在您的示例代码中。
  • 对不起,我没明白你的意思。
  • 我将“df”更改为“series”,我的错。试图更改我的代码的初始变量名称,以使其在这篇文章中更清晰。希望现在一切都好。 :)

标签: python pandas numpy time-series


【解决方案1】:

def GetDatetime()函数返回值改为:

return str(d)

这将返回时间序列能够处理的日期时间字符串。

【讨论】:

    【解决方案2】:

    如果我正确理解您的代码,当您这样做时:

    subseries = series['2015-07-07 01:00:00':'2015-07-07 03:30:00']
    

    你正在从两个字符串中分割series(顺便说一句,看到有一个熊猫数据类型Series,这很令人困惑)。

    如果可行,那么您需要 subseries= df[d:f] 提供的就是 df 是字符串。

    您可以通过调用 datetime 方法 .strftime() 来做到这一点,例如:

    d= GetDatetime().strftime('%Y-%m-%d 00:00:00')
    f= GetDatetime().strftime('%Y-%m-%d 00:00:00')
    

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 2020-01-12
      • 2012-07-03
      • 2021-06-04
      • 2020-04-09
      • 2018-08-10
      • 2019-08-04
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多