Python Pandas 0.13.1将groupby()与drop_duplicates()或dropna()一起使用
我刚刚从以前的版本更新到Pandas 0.13.1-很高兴,这为我打开了一些选择。不幸的是,它似乎给我的一些数据争用代码带来了问题。除了从0.11.0更新Pandas版本外,我没有做任何更改 以前有效但不再有效的代码如下:Python Pandas 0.13.1将groupby()与drop_duplicates()或dropna()一起使用,python,pandas,group-by,Python,Pandas,Group By,我刚刚从以前的版本更新到Pandas 0.13.1-很高兴,这为我打开了一些选择。不幸的是,它似乎给我的一些数据争用代码带来了问题。除了从0.11.0更新Pandas版本外,我没有做任何更改 以前有效但不再有效的代码如下: g_pres = g_pres.groupby(['follow','Focal','std_epoch']).dropna(0) 和/或 g_pres = g_pres.groupby(['follow','Focal','std_epoch']).drop_duplic
g_pres = g_pres.groupby(['follow','Focal','std_epoch']).dropna(0)
和/或
g_pres = g_pres.groupby(['follow','Focal','std_epoch']).drop_duplicates(0)
使用任一选项都会导致以下属性错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-169-5d3c7458da40> in <module>()
----> 1 g_pres = g_pres.groupby(['follow','Focal','std_epoch']).dropna(0)
//anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in __getattr__(self, attr)
293
294 if hasattr(self.obj, attr) and attr != '_cache':
--> 295 return self._make_wrapper(attr)
296
297 raise AttributeError("%r object has no attribute %r" %
//anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _make_wrapper(self, name)
308 "using the 'apply' method".format(kind, name,
309 type(self).__name__))
--> 310 raise AttributeError(msg)
311
312 f = getattr(self.obj, name)
AttributeError: Cannot access callable attribute 'dropna' of 'DataFrameGroupBy' objects, try using the 'apply' method
示例输出,其中我希望按follow、std_epoch和Focal进行分组——并从列“0”中删除重复值,分组方式(在本例中,这是输入中的第2行)
解决方案:基本上是重新思考问题。正如我在评论中指出的,我不需要使用groupby删除重复项,我只是将它们放在我以前代码中的同一行中。我仍然不清楚为什么这会在以前没有的地方产生一个错误(也许它应该总是抛出一个错误,尽管它确实产生了我想要的结果!)。然而,我现在只是用两行代码来完成这项工作 要删除重复项,请执行以下操作:
df = df.drop_duplicates()
要创建分组对象,请执行以下操作:
df = df.groupby(['column1','column2'])
为了在分组的数据帧上应用方法;您需要按如下方式使用循环:
display = IPython.display.display
g_pres = g_pres.groupby(['follow','Focal','std_epoch'])
for a,b in g_pres:
z = b.dropna(0)
display(z)
woops-感谢您的编辑,@EdChumyou不能在群中删除na;没有意义,这只是一个组列表;你想过滤吗?你想干什么?给出一个输入和输出的小例子8!根据定义,如果在重复的列上
groupby
,则生成的组没有重复项!哈哈……你说得对!具有讽刺意味的是,我们刚刚就增强groupby的文档进行了一次完整的讨论:@M.a.Kline在0.13的发行说明中有一行关于这一点的内容(开始删除在groupby对象上没有意义的方法(GH4887)
),但我认为你没有找到这一行是正常的…:-)。因此,这一方法以前确实有效的原因是,所有可用于数据帧的方法也可用于GroupBy对象,而现在只有在白名单中明确列出的方法(有意义的方法)我遇到了类似的问题,并通过df.GroupBy('my_column').apply(pd.Series.dropna)
解决了它。但是由于我入党晚了,版本就不一样了:-)
df = df.groupby(['column1','column2'])
display = IPython.display.display
g_pres = g_pres.groupby(['follow','Focal','std_epoch'])
for a,b in g_pres:
z = b.dropna(0)
display(z)