重采样引发 ValueError:值在第一个 bin 之前下降

Posted

技术标签:

【中文标题】重采样引发 ValueError:值在第一个 bin 之前下降【英文标题】:resampling raises ValueError: Values falls before first bin 【发布时间】:2022-01-22 22:06:00 【问题描述】:

我不明白何时以及为什么会出现此错误。

据我了解,resample 应该根据需要创建尽可能多的 bin,以便对索引的所有时间戳进行 bin。所以“值在第一个 bin 之前”的消息对我来说没有多大意义。

示例/实际输出:

>>> df = pd.DataFrame(index=pd.date_range(start='2021-04-22 01:00:00', end='2021-04-28 01:00', freq='1d'), data = [1]*7)
>>> df 
                     0
2021-04-22 01:00:00  1
2021-04-23 01:00:00  1
2021-04-24 01:00:00  1
2021-04-25 01:00:00  1
2021-04-26 01:00:00  1
2021-04-27 01:00:00  1
2021-04-28 01:00:00  1
>>> df.resample(rule='7d', origin='2021-04-29 00:00:00', closed='right', label='right').sum()
[...]
ValueError: Values falls before first bin

预期输出:

>>> df.resample(rule='7d', origin='2021-04-29 00:00:00', closed='right', label='right').sum() 
            0
2021-04-29  7 # bin (2021-04-22 00:00:00, 2021-04-29 00:00:00]

我正在使用pandas 1.3.5

【问题讨论】:

只是补充信息:可能相关issue on github 【参考方案1】:

从this question 我了解到,时间戳可能会根据rule 参数中给出的单位被截断它们被分类到正确的bin。

这意味着

    2021-04-22 01:00:00 舍入为 2021-04-22 00:00:00 2021-04-22 00:00:00 不适合垃圾箱 (2021-04-22 00:00:00, 2021-04-29 00:00:00] 导致 ValueError

在我看来,这看起来像是一个错误或功能错误。 “在分箱前截断时间戳”或“不根据需要添加分箱,而是引发错误”中的至少一个似乎是错误的。

【讨论】:

以上是关于重采样引发 ValueError:值在第一个 bin 之前下降的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:无法添加 *:实例在数据库“默认”上,值在数据库“无”上

上采样日期时间 - ValueError:无法使用方法或限制重新索引非唯一索引

DataFrame 列比较引发 ValueError:Series 的真值不明确。 [复制]

PythonException:从 UDF 引发异常:'ValueError:如何在 Databricks 中修复此错误?

if else 引发 ValueError

South 在尝试迁移时引发 ValueError