【问题标题】:Time series resampling to a weekly interval in pandas throws error时间序列重采样到 Pandas 中的每周间隔会引发错误
【发布时间】:2019-03-12 07:36:21
【问题描述】:

我正在探索时间序列数据(在 python 中)并想通过 pandas 将日期转换为每周间隔,但它会引发以下错误:

TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex,但得到了一个'RangeIndex'实例

数据(dates.csv):

install_date, user, mean_level 
2015-09-09, 1, 2
2015-09-11, 2, 2
2015-09-14, 3, 5
2015-09-14, 4, 6
2015-09-20, 5, 3
2015-09-25, 6, 3
2015-09-26, 7, 1
2015-09-27, 8, 1
2015-09-27, 9, 0
2015-09-29, 10, 0

代码:

import numpy as np
import pandas as pd

data = pd.read_csv('data/dates.csv', low_memory=False)

DateData = data.resample('W').sum().head()

print(DateData)

围绕日期转换尝试了几件事,但没有任何效果,这仍然会引发错误。这是我需要的输出:

输出:

install_date, user
2015-09-09, 3
2015-09-14, 12
2015-09-25, 40

谢谢!干杯。

【问题讨论】:

  • 首先将索引设置为install_date,然后设置为resample。使用df.set_index('install_date',inplace=True)
  • 也试过了。给出同样的错误。
  • 使用df['install_date'] = pd.to_datetime(df['install_date'])install_date的数据类型更改为datetime,然后按照上述步骤操作。
  • 同样的错误。不工作。已经试过了。
  • 它非常适合我。使用 pandas = 0.23.4 时我没有收到任何错误。

标签: python pandas


【解决方案1】:

首先将install_date 列转换为datetime 数据类型,然后使用所需的规则使用resample

print(df)
  install_date   user   mean_level 
0   2015-09-09      1             2
1   2015-09-11      2             2
2   2015-09-14      3             5
3   2015-09-14      4             6
4   2015-09-20      5             3
5   2015-09-25      6             3
6   2015-09-26      7             1
7   2015-09-27      8             1
8   2015-09-27      9             0
9   2015-09-29     10             0

df['install_date'] = pd.to_datetime(df['install_date'])
df.dtypes()
install_date    datetime64[ns]
 user                    int64
 mean_level              int64
dtype: object

方法一:使用列重采样

print(df.resample('7D',on='install_date').sum())

               user   mean_level 
install_date                     
2015-09-09       10            15
2015-09-16        5             3
2015-09-23       40             5

方法二:设置日期时间数据类型为索引并重采样

df.set_index('install_date',inplace=True)
print(df.resample('7D').sum())

               user   mean_level 
install_date                     
2015-09-09       10            15
2015-09-16        5             3
2015-09-23       40             5

【讨论】:

  • @VaibhavMagon 如果解决方案提供了您所需的结果,请upvote
猜你喜欢
  • 2013-01-09
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2019-01-30
相关资源
最近更新 更多