Python Pandas聚合错误:尝试计算模式时显示“找不到匹配的签名”

ippsafx7  于 2022-11-05  发布在  Python
关注(0)|答案(1)|浏览(150)

我有一个Pandas Dataframe 的列表,我想对所有这些 Dataframe 执行模式操作。
所有 Dataframe 具有相同的布局:
索引|日期|情绪|- -|--|--|第0页|2022-01-01|一个|一个|2022-02-03| -1个|2个|2021-10-01|第0页|一个人。
其中date是一个dt.date对象,sentiment是一个整数(-1、0或1)。我希望得到一个按日期分组的 Dataframe ,其中sentiment是原始 Dataframe 的模式(如果有更多的模式,则是一个模式列表)。
我用它来聚合:

df = df.groupby('date').agg(pd.Series.mode)

它可以很好地处理我的几乎所有 Dataframe ,只有其中一个返回错误:

File "..\lib\site-packages\pandas\core\apply.py", line 420, in agg_list_like
    raise ValueError("no results")
ValueError: no results

并且,在尝试处理错误时:

File "..\site-packages\pandas\core\algorithms.py", line 1090, in mode
    npresult = htable.mode(values, dropna=dropna, mask=mask)
  File "pandas\_libs\hashtable_func_helper.pxi", line 2291, in pandas._libs.hashtable.__pyx_fused_cpdef
TypeError: No matching signature found

我想这就是我的错误真正发生的地方。我在两列中都没有N/A值。
我的所有表都是在下面的数据类型:

date         object
sentiment     int64
dtype: object

我尝试删除所有NA值,但实际上什么也没做,我尝试将每列解析为不同的数据类型,希望这真的是一个类型错误,但没有成功。

cqoc49vn

cqoc49vn1#

只有当结果的长度为零时,才会出现这个错误,而当你取的模式序列中只有nans时,就会出现这个错误,因为.mode默认为dropna=True

import pandas as pd

pd.Series([np.nan, None]).mode()

Series([], dtype: float64) # produces value error in agg function

如果运行df = df.groupby('date').agg(lambda x: x.count),则应在导致错误的 Dataframe 中找到计数为零的日期。您可以使用.count作为过滤器,在运行聚集之前删除这些日期。
另外,不要认为你应该应用这样的类成员函数。

df = df.groupby('date').agg(lambda x:x.mode())

是比较正确的,而

df.groupby('date').mode()

我也希望能工作。

相关问题