没有使用 groupby() 和 mean() 聚合的数字类型

Posted

技术标签:

【中文标题】没有使用 groupby() 和 mean() 聚合的数字类型【英文标题】:No numeric types to aggregate using groupby() and mean() 【发布时间】:2020-09-02 16:17:23 【问题描述】:

我正在尝试确定流失率。如果我尝试使用.size() 执行,它可以工作。但如果我用.mean() 写它,它不会。我不明白为什么它不起作用,因为我需要找出平均值。

from sklearn.metrics import classification_report,confusion_matrix
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from sklearn.cluster import KMeans
import warnings
warnings.filterwarnings("ignore")
from pylab import rcParams
%matplotlib inline
import plotly.offline as pyoff
import plotly.graph_objs as go
import xgboost as xgb
from sklearn.model_selection import KFold, cross_val_score, train_test_split
import xgboost as xgb

#initate plotly
pyoff.init_notebook_mode()

#read data from csv and redo the data work we done before
df_data = pd.read_csv(r'C:\Users\aayus\OneDrive\Desktop\College Project\4. Churn Prediction\churn-data.csv', encoding='latin1')
df_data.head(10)
df_data.info()

df_data.loc[df_data.Churn=='No','Churn'] = 0
df_data.loc[df_data.Churn=='Yes','Churn'] = 1

df_plot = df_data.groupby('gender').Churn.size().reset_index()

这行得通。但是如果我用

改变最后一行
df_plot = df_data.groupby('gender').Churn.mean().reset_index()

它给出“没有要聚合的数字类型”。

DataError                                 Traceback (most recent call last)

<ipython-input-1-4875501f5fb5> in <module>
     26 df_data.loc[df_data.Churn=='No','Churn'] = 0
     27 df_data.loc[df_data.Churn=='Yes','Churn'] = 1
---> 28 f_plot = df_data.groupby('gender').Churn.mean().reset_index()

~\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\groupby\groupby.py in mean(self, *args, **kwargs)
   1222         """
   1223         nv.validate_groupby_func("mean", args, kwargs, ["numeric_only"])
-> 1224         return self._cython_agg_general(
   1225             "mean", alt=lambda x, axis: Series(x).mean(**kwargs), **kwargs
   1226         )

~\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\groupby\groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_count)
    905 
    906         if len(output) == 0:
--> 907             raise DataError("No numeric types to aggregate")
    908 
    909         return self._wrap_aggregated_output(output)

DataError: No numeric types to aggregate

DataError                                 Traceback (most recent call last)

<ipython-input-1-4875501f5fb5> in <module>
     26 df_data.loc[df_data.Churn=='No','Churn'] = 0
     27 df_data.loc[df_data.Churn=='Yes','Churn'] = 1
---> 28 f_plot = df_data.groupby('gender').Churn.mean().reset_index()

~\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\groupby\groupby.py in mean(self, *args, **kwargs)
   1222         """
   1223         nv.validate_groupby_func("mean", args, kwargs, ["numeric_only"])
-> 1224         return self._cython_agg_general(
   1225             "mean", alt=lambda x, axis: Series(x).mean(**kwargs), **kwargs
   1226         )

~\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\groupby\groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_count)
    905 
    906         if len(output) == 0:
--> 907             raise DataError("No numeric types to aggregate")
    908 
    909         return self._wrap_aggregated_output(output)

DataError: No numeric types to aggregate

DataError                                 Traceback (most recent call last)

<ipython-input-1-4875501f5fb5> in <module>
     26 df_data.loc[df_data.Churn=='No','Churn'] = 0
     27 df_data.loc[df_data.Churn=='Yes','Churn'] = 1
---> 28 f_plot = df_data.groupby('gender').Churn.mean().reset_index()

~\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\groupby\groupby.py in mean(self, *args, **kwargs)
   1222         """
   1223         nv.validate_groupby_func("mean", args, kwargs, ["numeric_only"])
-> 1224         return self._cython_agg_general(
   1225             "mean", alt=lambda x, axis: Series(x).mean(**kwargs), **kwargs
   1226         )

~\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\groupby\groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_count)
    905 
    906         if len(output) == 0:
--> 907             raise DataError("No numeric types to aggregate")
    908 
    909         return self._wrap_aggregated_output(output)

DataError: No numeric types to aggregate

非常感谢您的帮助。 这是 df_data.head(10) 的输出

电信数据集

【问题讨论】:

你能附加这个的可复制粘贴输出吗:df_data.head(10) 【参考方案1】:

确保您在流失列中没有任何其他值。使用 df_data['Churn'].value_counts()。 如果您可以共享前 10 行数据,那就太棒了。

【讨论】:

它有 21 列,但我可以这么说,性别列只有女性和男性变量,流失列只有是和否变量。 我相信您使用的是 Telco 数据集。我尝试运行您的代码,它运行良好。 是的,先生,我正在使用电信数据集。我尝试在同事的笔记本电脑上运行它,它在那里工作。我不明白为什么它不能在我的设备上运行。 ***.com/questions/12844529/…这可能对你有帮助。 还要确保您使用的是最新版本的 Pandas。

以上是关于没有使用 groupby() 和 mean() 聚合的数字类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mean Shift 进行文档聚类

多种聚类算法概述(BIRCH, DBSCAN, K-means, MEAN-SHIFT)

spark - 在大型数据帧上执行 groupby 和聚合时,java 堆内存不足

在没有变换的情况下在groupby中移动滚动平均值?

Python 绘图 groupby.mean

Numpy 操作对 groupby 无效。改用 .groupby(...).mean() ,这就是我所做的