【问题标题】:How to slice pandas series with hour stamps as index?如何以小时戳为索引对熊猫系列进行切片?
【发布时间】:2018-04-11 15:05:40
【问题描述】:

这是我的时间序列:

Time
00:00:00    24.364387
00:01:00    24.509357
00:02:00    24.484649
00:03:00    24.476170
00:04:00    24.458480
00:05:00    24.439327
Name: Vals, dtype: float64

如何根据特定的索引间隔访问值?比如myseries['00:02:00':'00:05:00']?我想我必须把它们变成时间戳(但只有小时、分钟和秒)。

所以我把它变成了一个数据框:

df=pd.DataFrame({'Time':myseries.index, 'Vals':myseries.vals})

如果我输入 df.dtypes 我会得到:

Vals            float64
Time            object
dtype: object

所以Time 是一个对象而不是datetime64[ns]。然后我尝试做:df['Time'].dt.time 但后来我得到:AttributeError: Can only use .dt accessor with datetimelike values

如果我尝试:df.loc['00:00:00':'00:05:00'],我只会得到我的标题。我错过了什么?

【问题讨论】:

    标签: python dataframe timestamp time-series


    【解决方案1】:

    这是我的尝试:

    import datetime as dt myseries = pd.DataFrame([24.364387,24.509357,24.484649,24.476170,24.458480,24.439327], index=pd.to_timedelta(['00:00:00','00:01:00','00:02:00','00:03:00','00:04:00','00:05:00'])) myseries.loc[dt.timedelta(minutes=1):dt.timedelta(minutes=3)]

    【讨论】:

      【解决方案2】:

      您需要使用函数 pd.to_datetime(Series)。代码如下:

      df.Time = pd.to_datetime(df.Time)
      
      df.dtypes
      Time     datetime64[ns]
      Vals           float64
      dtype: object
      

      【讨论】:

      • 它不起作用。上面写着TypeError: <type 'datetime.time'> is not convertible to datetime,但实际上我的时间栏是object
      【解决方案3】:

      可能是您的情况,您根本不需要转换。 当您将系列转换为数据框时,请执行以下操作:

      df = pd.DataFrame(myseries, columns=['Vals'])
      

      那就试试

      df.loc['00:00:00':'00:05:00']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-17
        • 2020-10-20
        • 2013-10-09
        • 2018-10-27
        • 2015-05-11
        • 2018-07-28
        • 2018-01-20
        • 2017-06-22
        相关资源
        最近更新 更多