类型错误:“DataFrame”对象不可调用”

问题描述 投票:0回答:4

我是这里的新手。英语不是我的母语,所以请原谅任何语法错误。我正在尝试根据

df
:

中的数据计算金发女郎的平均年龄
    np.random.seed(0)
df = pd.DataFrame({'Age':[18, 21, 28, 19, 23, 22, 18, 24, 25, 20],
                   'Hair colour':['Blonde', 'Brown', 'Black', 'Blonde', 'Blonde', 'Black','Brown', 'Brown', 'Black', 'Black'],
                   'Length (in cm)':np.random.normal(175, 10, 10).round(1),
                   'Weight (in kg)':np.random.normal(70, 5, 10).round(1)},
                index = ['Leon', 'Mirta', 'Nathan', 'Linda', 'Bandar', 'Violeta', 'Noah', 'Niji', 'Lucy', 'Mark'],)

我需要得到一个号码。

首先,我尝试使用“df.divide”。

    # 1. Here we import pandas
import pandas as pd
# 2. Here we import numpy
import numpy as np
ans_3 = df({'Age'}).divide(df({'Hair colour': ['Blonde']}))

但是,我遇到了这个 TypeError: 'DataFrame' object is not callable.

我应该如何处理我的代码才能得到适当的结果?

python python-3.x pandas dataframe series
4个回答
1
投票

您收到此错误是因为您使用了

df(..)
。 这是调用函数的 python 语法。 您可能想要
df[..]

回答你的问题:

(
    df  # given your data
      [df["Hair colour"] == "Blonde"]  # only look at blonde people
    ["Age"]  # for those in the Age column
    .mean()  # and compute the mean
)

0
投票

运行:

df[df['Hair colour'] == 'Blonde'].Age.mean()

详情:

  • df['Hair colour'] == 'Blonde'
    - 生成 bool 类型的 Series, 说明当前行是否有 Blonde 头发。
  • df[…]
    - 获取满足上述条件的行。
  • Age
    - 从上面的行中仅选取 Age 列。
  • mean()
    - 计算平均年龄。

0
投票

正如已经指出的那样,由于您使用括号来将可调用对象作为函数调用,因此会出现错误。相反,您应该使用用于切片和选择数据的括号。

作为建议,我建议您使用 groupby 方法来检查人口统计数据。如果您想知道可观察到的平均值与头发颜色的函数,您可以这样做:

df.groupby("Hair colour").mean()

这将返回您以下内容

头发颜色 年龄 长度(厘米) 重量(公斤)
黑色 23.75 175.775 70.7
金发女郎 20.0 194.5666666666667 71.16666666666667
棕色 21.0 179.0 74.60000000000001

由此可见,金发女郎的平均年龄是 20 岁。

如果你想检索这个特定值,你可以这样做:

df.groupby("Hair colour").mean()["Age"]["Blonde"]

0
投票

如果使用 xlwings 将 Excel 中的工作表加载到数据框中时发生这种情况,您可能不小心添加了 (),就像代码中一样:

df = alreadyLoadedSheet.range("a1:b1").options(pd.DataFrame).value()

去掉空括号,消除错误。

df = alreadyLoadedSheet.range("a1:b1").options(pd.DataFrame).value
© www.soinside.com 2019 - 2024. All rights reserved.