Python Pandas agg 错误

数据挖掘 熊猫 聚合 python-3.x
2022-03-04 15:19:21

我正在尝试使用 Pandas 中的 agg 函数生成描述性统计数据。我在使用 lambda 函数的一行时遇到问题。当我将它们作为单独的代码行运行时它们会起作用,但是当我将它们作为单行运行时会出现错误。

非常感谢任何指导。

以下两行代码在我单独运行时起作用。

第一行代码:

bh_df.groupby('CAT.MEDV').agg(
  avg_Nox=('NOX', 'mean'))

第二行带有 lambda 函数。

bh_df.groupby('CAT.MEDV').agg(
   rng=("NOX", lambda x: (max(x) - min(x))))

但是,当我将它们组合成一行代码时:

bh_df.groupby('CAT.MEDV').agg(
   avg_Nox=('NOX', 'mean'),
   rng=("NOX", lambda x: (max(x) - min(x))))

我收到一大堆错误:

文件“”,第 4 行,在

rng=("NOX", λ x: (max(x) - min(x))))

文件“C:\Users\pdile\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py”,第 1455 行,总计返回 super().aggregate(arg, *args, **kwargs)

文件“C:\Users\pdile\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py”,第 264 行,汇总结果 = 结果 [顺序]

文件“C:\Users\pdile\Anaconda3\lib\site-packages\pandas\core\frame.py”,第 2986 行,在getitem indexer = self.loc._convert_to_indexer(key, axis=1, raise_missing=True)

文件“C:\Users\pdile\Anaconda3\lib\site-packages\pandas\core\indexing.py”,第 1285 行,在 _convert_to_indexer 中返回 self._get_listlike_indexer(obj, axis, **kwargs)[1]

文件“C:\Users\pdile\Anaconda3\lib\site-packages\pandas\core\indexing.py”,第 1092 行,在 _get_listlike_indexer keyarr、indexer、o._get_axis_number(axis)、raise_missing=raise_missing

_validate_read_indexer 中的文件“C:\Users\pdile\Anaconda3\lib\site-packages\pandas\core\indexing.py”,第 1185 行

最终错误:

raise KeyError("{} 不在索引中".format(not_found))

KeyError:“[('NOX','')]不在索引中”

2个回答

如果我没记错的话,使用的数据集是来自http://lib.stat.cmu.edu/datasets/boston的波士顿房屋价值数据集

如果使用的数据集正确,给定的代码在 google colab 上运行良好。请在继续之前检查数据集。这是相同的屏幕截图。

第 1 步:读取数据集

在此处输入图像描述

第 2 步:打印数据集的前 5 行 在此处输入图像描述

第三步:在 Pandas 中使用 agg 函数生成描述性统计注意:我根据数据集更改了列名

在此处输入图像描述

这是第 3 步的另一个解决方案 在此处输入图像描述

注意:我已经在 google colab 上运行了脚本。由于版本问题,您的问题可能存在。

这是使用的代码。

import pandas as pd
import numpy as np
house=pd.read_csv('Boston.csv')
house.columns
 
house.groupby('medv').agg(
  avg_Nox=('nox', 'mean'),
  rng=("nox", lambda x: (max(x) - min(x))))
 
house.groupby(['medv'])['nox'].agg(
    [('avg_nox',  np.mean), 
    ('rng', lambda x: (max(x)-min(x)))])

您可以在此处查看类似的机器学习项目,该项目根据其他变量预测房屋价格https://bit.ly/3ApVCAO

因为没有更多的列“NOX”

您在之前的平均聚合中更改了它。尝试“avg_Nox”或应用第一个聚合函数后获得的任何列名

bh_df.groupby('CAT.MEDV').agg(
  avg_Nox=('NOX', 'mean'))