【问题标题】:TypeError 'DataFrame' object is not callableTypeError 'DataFrame' 对象不可调用
【发布时间】:2020-10-08 22:47:56
【问题描述】:

我创建了一个函数并在 for 循环中使用它,但得到 TypeError 'DataFrame' object is not callable

def Freq(df, keyvar, *args):
    Freq = pd.DataFrame({'Frequency': df.groupby([*args])[keyvar].count()}).reset_index()
    Freq['Percent'] = (Freq['Frequency']/sum(Freq['Frequency'])*100).round(2)
    Freq['Cumulative Frequency'] = Freq['Frequency'].cumsum()
    Freq['Cumulative Percent'] = (Freq['Cumulative Frequency']/sum(Freq['Frequency'])*100).round(2)
    return Freq

我在上面使用了这个Freq()

freq_var = ['A', 'B', 'C', 'D', 'E']
for col in freq_var:
    Freq = Freq(data, 'KEYS', f'{col}')
    print(f'============ {col} frequency table ============\n{Freq}\n\n')


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-2d4041b2961b> in <module>()
      1 freq_var = ['A', 'B', 'C', 'D', 'E']
      2 for col in freq_var:
----> 3     Freq = Freq(data, 'KEYS', f'{col}')
      4     print(f'============ {col} frequency table ============\n{Freq}\n\n')

TypeError: 'DataFrame' object is not callable

如果我没有调用Freq()直接输入,没有错误,输出成功。

for col in freq_var:
    Freq = pd.DataFrame({'Frequency': data.groupby([col])['KEYS'].count()}).reset_index()
    Freq['Percent'] = (Freq['Frequency']/sum(Freq['Frequency'])*100).round(2)
    Freq['Cumulative Frequency'] = Freq['Frequency'].cumsum()
    Freq['Cumulative Percent'] = (Freq['Cumulative Frequency']/sum(Freq['Frequency'])*100).round(2) 
    print(f'============ {col} frequency table ============\n{Freq}\n\n')   

有人知道这个问题吗?

【问题讨论】:

    标签: python pandas error-handling pandas-groupby data-manipulation


    【解决方案1】:

    不要将变量命名为与函数名称相同。您实际上是在用 DataFrame 覆盖您的函数,所以当您的第二次迭代发生时,Freq 是一个数据帧,而不是您认为的函数。

    freq_var = ['A', 'B', 'C', 'D', 'E']
    for col in freq_var:
        freq_df = Freq(data, 'KEYS', f'{col}')
        print(f'============ {col} frequency table ============\n{freq_df}\n\n')
    

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 2017-06-17
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2019-08-09
      • 2018-02-01
      相关资源
      最近更新 更多