这是一个相当普遍的问题:我想知道df.groupby(level = 'id').agg(['count'])
在什么情况下会导致以下类型错误:
TypeError Traceback (most recent call last)
<ipython-input-116-b422fc0967b1> in <module>()
----> 4 df.groupby(level = 'id', sort = False).agg(['count'])
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py in aggregate(self, func_or_funcs, *args, **kwargs)
2798 if hasattr(func_or_funcs, '__iter__'):
2799 ret = self._aggregate_multiple_funcs(func_or_funcs,
-> 2800 (_level or 0) + 1)
2801 else:
2802 cyfunc = self._is_cython_func(func_or_funcs)
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py in _aggregate_multiple_funcs(self, arg, _level)
2867 # reset the cache so that we
2868 # only include the named selection
-> 2869 if name in self._selected_obj:
2870 obj = copy.copy(obj)
2871 obj._reset_cache()
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __contains__(self, key)
905 def __contains__(self, key):
906 """True if the key is in the info axis"""
--> 907 return key in self._info_axis
908
909 @property
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/multi.py in __contains__(self, key)
1326 hash(key)
1327 try:
-> 1328 self.get_loc(key)
1329 return True
1330 except LookupError:
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/multi.py in get_loc(self, key, method)
1964
1965 if not isinstance(key, tuple):
-> 1966 loc = self._get_level_indexer(key, level=0)
1967 return _maybe_to_slice(loc)
1968
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/multi.py in _get_level_indexer(self, key, level, indexer)
2227 else:
2228
-> 2229 loc = level_index.get_loc(key)
2230 if isinstance(loc, slice):
2231 return loc
/home/user/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2391 key = _values_from_object(key)
2392 try:
-> 2393 return self._engine.get_loc(key)
2394 except KeyError:
2395 return self._engine.get_loc(self._maybe_cast_indexer(key))
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5239)()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:4881)()
pandas/_libs/index.pyx in pandas._libs.index._bin_search (pandas/_libs/index.c:8637)()
TypeError: '<' not supported between instances of 'numpy.ndarray' and 'str'
我问这个是因为我有一个数据框,在某些情况下会发生此错误,但并非总是如此,例如,如果我使用df.head(n).groupby(level = 'id').agg(['count'])
,那么根据n我会收到此错误。例如,它可以正常运行到2523475并且从2523476失败但是我找不到这些位置的行有什么问题,它们看起来与数据帧中的所有其他行相同并且没有空值。
我认为数据肯定存在问题,但为了找到发生此错误时我需要知道的内容。
数据是这种格式的系列:
id date
3531364 2017-04-13 1
1550725 2017-02-21 1
1819411 2017-04-19 1
1636629 2016-12-28 1
3123152 2017-05-03 1
dtype: int64
如果重要,则日期为期间。转换to_dict()
给了我这个:
{(1550725, Period('2017-02-21', 'D')): 1,
(1636629, Period('2016-12-28', 'D')): 1,
(1819411, Period('2017-04-19', 'D')): 1,
(3123152, Period('2017-05-03', 'D')): 1,
(3531364, Period('2017-04-13', 'D')): 1}
可能有助于某人诊断问题的额外位:
如果我执行aux = df.head(5)
然后aux.groupby(level = 'id').agg(['count'])
我收到错误,则会失败但是aux.groupby(level = 'id').count()
工作正常。这也令人费解,因为原始数据帧df.head(5).groupby(level = 'id').agg(['count'])
完美无缺。也许某些东西被缓存了?怎么会发生这种情况?
如果您使用此处粘贴的系列I进行尝试,它将适用于您,它将对我有用,但如果我收到错误然后获取head(5)
的{{1}}则会失败。 ..(!)。我猜最终有些事情会导致df
失败,并且某些东西在某种程度上被大熊猫缓存,但我真的不知道幕后发生了什么。
我将不胜感激任何帮助。我知道这并不容易。