如何在带有字符串列的Pandas数据透视表中使用数值聚合函数时防止'NotImplementedError'和'TypeError'?

pcrecxhr  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(268)

我已经多次尝试使用pandas对数值数据执行一些数值聚合方法。然而,我收到了一个NotImplementedError,每当我这样做时,它就会抛出一个TypeError。我假设pandas在执行上述数值任务时拒绝忽略字符串列。我如何防止这种情况发生?
给定一个名为matrix_data的数据透视表,并将pandas导入为pan

Account Number  Company      Contact Account Manager     Product  Licenses   
0         2123398   Google  Larry Pager    Edward Thorp   Analytics       150  
1         2123398   Google  Larry Pager    Edward Thorp  Prediction       150   
2         2123398   Google  Larry Pager    Edward Thorp    Tracking       300   
3         2192650     BOBO  Larry Pager    Edward Thorp   Analytics       150   
4          420496     IKEA    Elon Tusk    Edward Thorp   Analytics       300   

   Sale Price        Status  
0     2100000     Presented  
1      700000     Presented  
2      350000  Under Review  
3     2450000          Lost  
4     4550000           Won

尝试按公司汇总所有数值:

pan.pivot_table(matrix_data, index = "Company", aggfunc="mean");

抛出一个异常如下:

NotImplementedError                       Traceback (most recent call last)
File ~\AppData\Roaming\Python\Python311\site-packages\pandas\core\groupby\groupby.py:1490, in GroupBy._cython_agg_general..array_func(values)
   1489 try:
-> 1490     result = self.grouper._cython_operation(
   1491         "aggregate",
   1492         values,
   1493         how,
   1494         axis=data.ndim - 1,
   1495         min_count=min_count,
   1496         **kwargs,
   1497     )
   1498 except NotImplementedError:
   1499     # generally if we have numeric_only=False
   1500     # and non-applicable functions
...
   1698             # e.g. "foo"
-> 1699             raise TypeError(f"Could not convert {x} to numeric") from err
   1700 return x

TypeError: Could not convert Larry PagerLarry PagerLarry Pager to numeric

dataframe.groupby(["col_name1"]).mean()将抛出相同的错误
我用的是windows10,python3.11,pandas版本2.0.1。所有这些都是在Jupyter Notebook上使用VScode执行的

abithluo

abithluo1#

这在Pandas 2.0中已被弃用。这是pandas 1.5.3给出的警告:
未来警告:pivot_table删除了一个列,因为它无法聚合。此行为已弃用,并将在pandas的未来版本中引发。仅选择可以聚合的列。
现在必须选择要聚合的特定列。

cols = ['Licenses', 'Sale Price']
pd.pivot_table(matrix_data, values=cols, index="Company", aggfunc="mean")

相关问题