TypeError:<lambda>()在使用apply和groupby时得到了意外的关键字参数'axis'

时间:2019-04-05 14:40:18

标签: python pandas pandas-groupby

Am尝试从pandas数据框中提取按ID拆分的值。但是,当我输入apply groupby时,它不会让我提供轴参数来按行应用功能

raw_data = {"id":{"0":"mergedshape_route_0009","1":"mergedshape_route_0009","2":"mergedshape_route_0009","3":"mergedshape_route_0009","4":"mergedshape_route_0009","5":"mergedshape_route_0009","6":"mergedshape_route_0009","7":"mergedshape_route_0009","8":"mergedshape_route_0009","9":"mergedshape_route_0009"},"shape_pt_lat":{"0":-6.8196991355,"1":-6.8194035167,"2":-6.8192916609,"3":-6.8192597021,"4":-6.8193262829,"5":-6.819395527,"6":-6.8194451,"7":-6.8192582,"8":-6.8184049,"9":-6.8177623},"shape_pt_lon":{"0":39.2987716198,"1":39.2989432812,"2":39.299055934,"3":39.29918468,"4":39.2993053794,"5":39.2993938923,"6":39.2994472,"7":39.2995691,"8":39.2999065,"9":39.2986298},"shape_pt_sequence":{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9},"shape_dist_traveled":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0}}

df = pd.DataFrame(raw_data).groupby("id").apply(lambda row: row.shape_pt_lat, axis = 1)

我收到此错误

TypeError                                 Traceback (most recent call last)
~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, func, *args, **kwargs)
    917             try:
--> 918                 result = self._python_apply_general(f)
    919             except Exception:

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in _python_apply_general(self, f)
    935         keys, values, mutated = self.grouper.apply(f, self._selected_obj,
--> 936                                                    self.axis)
    937 

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, f, data, axis)
   2272             group_axes = _get_axes(group)
-> 2273             res = f(group)
   2274             if not _is_indexed_like(res, group_axes):

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in f(g)
    907                     with np.errstate(all='ignore'):
--> 908                         return func(g, *args, **kwargs)
    909             else:

TypeError: <lambda>() got an unexpected keyword argument 'axis'

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-323-9499f329157a> in <module>()
----> 1 df = pd.DataFrame(raw_data).groupby("id").apply(lambda row: row.shape_pt_lat, axis = 1)

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, func, *args, **kwargs)
    928 
    929                 with _group_selection_context(self):
--> 930                     return self._python_apply_general(f)
    931 
    932         return result

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in _python_apply_general(self, f)
    934     def _python_apply_general(self, f):
    935         keys, values, mutated = self.grouper.apply(f, self._selected_obj,
--> 936                                                    self.axis)
    937 
    938         return self._wrap_applied_output(

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, f, data, axis)
   2271             # group might be modified
   2272             group_axes = _get_axes(group)
-> 2273             res = f(group)
   2274             if not _is_indexed_like(res, group_axes):
   2275                 mutated = True

~\Miniconda3\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py in f(g)
    906                 def f(g):
    907                     with np.errstate(all='ignore'):
--> 908                         return func(g, *args, **kwargs)
    909             else:
    910                 raise ValueError('func must be a callable if args or '

TypeError: <lambda>() got an unexpected keyword argument 'axis'

如果我按ID拆分数据帧并将其存储在列表中,然后循环遍历每个数据帧以提取值,那么我就可以开始工作,但是我想要一种直接使用groupby并应用的方法吗?

这里的任何指导将不胜感激?

谢谢!

1 个答案:

答案 0 :(得分:1)

我有一个类似的错误。我发现GroupBy对象的apply函数的行为与Pandas DataFrame的apply函数不同。可以在here中找到有关GroupBy对象的apply函数的更多信息。

您在apply函数中提供的函数应以dataframe作为参数。它还返回dataframe。因此,该函数修改了dataframe,而您提供的函数则修改了一行。

它给出错误<lambda>() got an unexpected keyword argument 'axis',因为这里的apply函数仅接受修改数据帧和馈入函数的args kwargs的函数。

它将尝试将lambda函数的轴参数(它认为是该函数的参数)提供给您的lambda函数,并且由于您的lambda函数不需要此参数,因此会显示此错误。

您最终的解决方案是将lambda函数更改为如上所述的正确函数。