如何将 Timer 与 returns 数据帧的函数一起使用?

How to use Timer with a function that returns a dataframe?

我想每 n 分钟查询一个 API 并将响应解析为数据帧。但是,我在尝试这样做时遇到 TypeError

TypeError: 'DataFrame' object is not callable

我试过:

在#1 中,我得到“'dict' 对象不可调用”。
在#2 中,我得到“'DataFrame not callable'”错误(如上所示)。
如果我改为打印函数的结果,两者都可以正常工作 但是 我需要对结果进行计算,因此需要返回数据帧响应。

看来我遗漏了一些明显的东西。谁能解释一下?

参考:

from threading import Timer, Thread

def run_alert(time):
t = Timer(time, print_query_results(*args))
t.start()

编辑#1:

DataFrame 对象是来自 API 的响应,格式为 10x3 table:

import numpy as np
import pandas as pd
from pandas.io.json import json_normalize

    medium    source    pageviews
0   DIRECT    (not set) xxx
1   ORGANIC   google    xxx
2   ORGANIC   yahoo     xxx
4   ORGANIC   bing      xxx
*     *       *          *

编辑#2:

def print_query_results(ids, metrics, dimensions, filters, sort):   

#get results from request
results = run_query(ids, metrics, dimensions, filters, sort)

#convert json into dataframe
cols = json_normalize(results['columnHeaders'])['name']
rows = json_normalize(results, 'rows')

cols_names = []

for name in cols:
    cols_names.append(name.split(":")[1])

df = pd.DataFrame(rows)
df.columns = [cols_names]
df.rename(columns = {'pageviews':'pageviews'+" "+strftime('%I:%M %p')}, inplace=True)

df = df.convert_objects(convert_numeric=True)

return df

就像我在评论中所说的那样(确实应该有适当的标签甚至 import 语句来准确显示 Timer/DataFrame 是什么),您的 threading.Timer 对象需要一些可调用的东西 -这样当时间过去时,它可以使用该计算块启动一个线程。

当你传递 Timer print_query_results(*args) 时,函数 print_query_results 在传递给 Timer 之前由解释器求值,所以你得到一个 dictDataFrame 或函数返回的任何内容 - 而不是函数。解决此问题的一种方法是

t = Timer(time, lambda: print_query_results(*args))

除了这种解决方法之外,我们看不到您的程序的足够多的内容来提出建议,但在这些类型不匹配的情况下,通常存在一个潜在的概念问题,值得进行一些重构。