python - DataFrame.groupby(TimeGrouper ="d"): Invalid length for values or for binner

标签 python exception pandas

我正在尝试使用 pandas 的 groupby 函数在具有 DateTimeIndex 的 DataFrame 上构建我的数据组。使用 pd.TimeGrouper,我想按天分组。

当我定义这个 DataFrame 时,下面的操作 n.groupby(pd.TimeGrouper("d")) 不起作用。

n = pd.DataFrame(
    {"value": [5462,5462,3185]},
    index=[pd.to_datetime("2013-10-13 19:03:54"),
           pd.to_datetime("2013-10-12 19:03:54"),
           pd.to_datetime("2013-10-11 13:19:23")])

错误:

n.groupby(pd.TimeGrouper("d"))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-248-120eaa65b064> in <module>()
----> 1 n.groupby(pd.TimeGrouper("d"))

\lib\site-packages\pandas\core\generic.pyc in groupby(self, by, axis, level, as_index, sort, group_keys, squeeze)
    184         return groupby(self, by, axis=axis, level=level, as_index=as_index,
    185                        sort=sort, group_keys=group_keys,
--> 186                        squeeze=squeeze)
    187 
    188     def asfreq(self, freq, method=None, how=None, normalize=False):

\lib\site-packages\pandas\core\groupby.pyc in groupby(obj, by, **kwds)
    531         raise TypeError('invalid type: %s' % type(obj))
    532 
--> 533     return klass(obj, by, **kwds)
    534 
    535 

\lib\site-packages\pandas\core\groupby.pyc in __init__(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, squeeze)
    195         if grouper is None:
    196             grouper, exclusions = _get_grouper(obj, keys, axis=axis,
--> 197                                                level=level, sort=sort)
    198 
    199         self.grouper = grouper

\lib\site-packages\pandas\core\groupby.pyc in _get_grouper(obj, key, axis, level, sort)
   1268 
   1269     if isinstance(key, CustomGrouper):
-> 1270         gpr = key.get_grouper(obj)
   1271         return gpr, []
   1272     elif isinstance(key, Grouper):

\lib\site-packages\pandas\tseries\resample.pyc in get_grouper(self, obj)
    106     def get_grouper(self, obj):
    107         # Only return grouper
--> 108         return self._get_time_grouper(obj)[1]
    109 
    110     def _get_time_grouper(self, obj):

\lib\site-packages\pandas\tseries\resample.pyc in _get_time_grouper(self, obj)
    112 
    113         if self.kind is None or self.kind == 'timestamp':
--> 114             binner, bins, binlabels = self._get_time_bins(axis)
    115         else:
    116             binner, bins, binlabels = self._get_time_period_bins(axis)

\lib\site-packages\pandas\tseries\resample.pyc in _get_time_bins(self, axis)
    146 
    147         # general version, knowing nothing about relative frequencies
--> 148         bins = lib.generate_bins_dt64(ax_values, bin_edges, self.closed)
    149 
    150         if self.closed == 'right':

\lib\site-packages\pandas\lib.pyd in pandas.lib.generate_bins_dt64 (pandas\lib.c:16139)()

ValueError: Invalid length for values or for binner

令人惊讶的是,当我像下面这样定义 DataFrame 时,它​​工作得很好。请注意,我将最后一天更改为 2013-10-12 而不是 2013-10-11。

n = pd.DataFrame(
    {"value": [5462,5462,3185]},
    index=[pd.to_datetime("2013-10-13 19:03:54"),
           pd.to_datetime("2013-10-13 19:03:54"),
           pd.to_datetime("2013-10-12 13:19:23")])

在这种情况下,我得到了一个正确的组对象:

n.groupby(pd.TimeGrouper("d"))
<pandas.core.groupby.DataFrameGroupBy object at 0x000000000A3D84E0>

我已经在源代码中查找了pandas的一些核心功能,但我不确定这是一个错误还是我不知道如何正确使用这些功能。

另请注意,按月聚合效果很好。

感谢您的帮助。

最佳答案

这是一个错误,因为索引不是单调排序的,参见 here .但没有理由使用 TimeGrouper,这有点像内部 ATM,使用 resample

In [3]: df
Out[3]: 
                     value
2013-10-13 19:03:54   5462
2013-10-12 19:03:54   5462
2013-10-11 13:19:23   3185

In [4]: df.resample('d')
Out[4]: 
            value
2013-10-11   3185
2013-10-12   5462
2013-10-13   5462

关于python - DataFrame.groupby(TimeGrouper ="d"): Invalid length for values or for binner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636370/

相关文章:

python - 检查 pandas 数据框中的列值是否存在于一个系列中

python - 数据透视表来填充 Pandas 中的成对观察

python碰撞检测解决循环依赖

python - 在 Python 中使用 C 函数

写入字节数组时出现java.lang.NullPointerException

c# - 在 web api 中捕获异常 - 我应该使用 try-catch 语句吗?

python - Pandas :逻辑和两个数据框

python - 根据 sqlalchemy 模型的唯一约束检查​​数据帧记录

python - 在列表列表中查找索引和总和

c# - 全局捕获后台线程中 WCF 异步调用引发的异常