【问题标题】:Reindex method of Pandas does not respect the set frequencyPandas 的重新索引方法不尊重设定的频率
【发布时间】:2016-11-26 14:12:45
【问题描述】:

我有一个带有每日 DatetimeIndex 的 Pandas DataFrame。我正在尝试应用 Resample 方法将值汇总为每月系列,如下所示:

>>> aggVols.resample('M',axis=1).sum()

但是当我尝试这个时,我得到了错误

TypeError: Only valid with DatetimeIndex or PeriodIndex

我注意到对象的索引频率没有设置(无)。

>>>aggVols.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2016-01-04, ..., 2016-07-01]
Length: 130, Freq: None, Timezone: None

所以我首先将频率设置为每天(工作日)并重置索引,以便我可以应用重新采样:

>>> aggVols    = aggVols.reindex(aggVols.asfreq('B').index)
>>> aggVols.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2016-01-04, ..., 2016-07-01]
Length: 130, Freq: B, Timezone: None

但我仍然遇到与 resample 函数相同的错误:

TypeError: Only valid with DatetimeIndex or PeriodIndex

索引有什么问题?为什么无效? 如果我将频率设置为 D,我会得到同样的错误。

谢谢!

【问题讨论】:

  • 请发布 DataFrame 的示例。

标签: python pandas dataframe frequency datetimeindex


【解决方案1】:

改变

aggVols.resample('M',axis=1).sum()

aggVols.resample('M',axis=0).sum()

您的DatetimeIndex 位于行(而不是列)上。

一般来说,轴 0 是行,轴 1 是列,轴 2 是高度,轴 3-N ......好吧,它们被考虑得更抽象了。

请参阅the NumPy docs 的“沿轴”部分。

【讨论】:

  • 感谢您的回复。你是对的, DatetimeIndex 用于行(而不是列)。所以我可能确实指定了错误的轴。但是你的建议给我每列一个数字。它不制作月度系列。 '>>> aggVols.resample('M',axis=0).sum() CMX 114237.608293 LME 1425516.887879 SHF 50861180.513820 dtype: float64'
  • @David 你想对 DataFrame 的行求和吗?
  • @David 如果您发布示例 DataFrame 和您想要的结果,它会有所帮助。
  • 在上面回答了我自己的问题。无论如何感谢您的帮助。
【解决方案2】:

最后明白了。使用方法错误的方法与最后的操作,好像它是一个系列。正确的代码是:

aggVols.resample('M',axis=0,how=sum)

【讨论】:

    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2018-02-02
    • 1970-01-01
    • 2019-11-19
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多