numpy TypeError:“DataFrame”对象不可调用

xlpyo6sf  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(263)

我已经编写了计算方差的程序

credit_card = pd.read_csv("default_of_credit_card_clients_Data.csv", skiprows=1)
    
for col in credit_card:
    var[col]=np.var(credit_card(col))

我收到此错误

Traceback (most recent call last):
   File "C:/Python34/project.py", line 11, in <module>
     var[col]=np.var(credit_card(col)) 
TypeError: 'DataFrame' object is not callable
6ljaweal

6ljaweal1#

您似乎需要DataFrame.var
默认情况下按N-1规范化。可以使用ddof参数更改此设置

var1 = credit_card.var()

样品:

#random dataframe
np.random.seed(100)
credit_card = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list('ABCDE'))
print (credit_card)
   A  B  C  D  E
0  8  8  3  7  7
1  0  4  2  5  2
2  2  2  1  0  8
3  4  0  9  6  2
4  4  1  5  3  4

var1 = credit_card.var()
print (var1)
A     8.8
B    10.0
C    10.0
D     7.7
E     7.8
dtype: float64

var2 = credit_card.var(axis=1)
print (var2)
0     4.3
1     3.8
2     9.8
3    12.2
4     2.3
dtype: float64

如果需要numpy.var的numpy解决方案:

print (np.var(credit_card.values, axis=0))
[ 7.04  8.    8.    6.16  6.24]

print (np.var(credit_card.values, axis=1))
[ 3.44  3.04  7.84  9.76  1.84]

差异是因为默认情况下ddof=1pandas中,但可以将其更改为0

var1 = credit_card.var(ddof=0)
print (var1)
A    7.04
B    8.00
C    8.00
D    6.16
E    6.24
dtype: float64

var2 = credit_card.var(ddof=0, axis=1)
print (var2)
0    3.44
1    3.04
2    7.84
3    9.76
4    1.84
dtype: float64
pengsaosao

pengsaosao2#

当你调用一个PandasDataFrame对象a-使用圆括号()--就像它是一个类或函数一样时,就会发生这个错误。长话短说,PandasDataFrame是一个“DataFrame”类型的对象,它的属性使一个对象成为可调用的,它是空的。
例如,在OP中,罪魁祸首是:

credit_card(col)

因为之前credit_card是通过

credit_card = pd.read_csv("default_of_credit_card_clients_Data.csv", skiprows=1)

定义 Dataframe 最常用的方法是通过构造函数df = pd.DataFrame(data),而这个df也不能被调用:df()也会给予同样的错误。构造 Dataframe 对象的其他函数列表可以在pandas documentation中找到。
此问题本质上是打字错误。以下是一些常见原因/解决方案:
1.也许您试图选择 Dataframe 的某些列,在这种情况下,请使用方括号[]

credit_card[col]                # e.g. credit_card['colA'] or credit_card[['colA']]

1.也许您正在尝试调用一个 Dataframe 方法,在这种情况下,请在 Dataframe 的名称之后写入方法的名称,用点.分隔:

credit_card.some_method(col)    # e.g. credit_card.value_counts('colA')

1.也许您的环境中有一个函数和一个 Dataframe 共享相同的名称。例如,

credit_card = lambda x: x + 1
credit_card = pd.DataFrame(data)

在这种情况下,请确保使用不同的名称重新定义它们。

相关问题