我有一个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值,但实际上什么也没做,我尝试将每列解析为不同的数据类型,希望这真的是一个类型错误,但没有成功。
1条答案
按热度按时间cqoc49vn1#
只有当结果的长度为零时,才会出现这个错误,而当你取的模式序列中只有nans时,就会出现这个错误,因为
.mode
默认为dropna=True
。如果运行
df = df.groupby('date').agg(lambda x: x.count)
,则应在导致错误的 Dataframe 中找到计数为零的日期。您可以使用.count
作为过滤器,在运行聚集之前删除这些日期。另外,不要认为你应该应用这样的类成员函数。
是比较正确的,而
我也希望能工作。