我编写了一个Python脚本,它用邮政编码调用了国家海洋和大气管理局(NOAA)端点,并得到了相应的气象站列表。然后,脚本将响应转换为。
我相信我已经根据这个复裂.The数据格式正确地工作了,并且我可以使用断点检查它。
使用这个博客教程作为我的指南,我的真正目标是在Tableau流中利用这个Python。Tableau基本上是一个桌面ETL工具,类似于PowerQuery,但不同的是:)。
我有一个TabPy服务器的本地工作实例,它的日志似乎也显示了数据文件的正确构造(如下图)。然而,我得到了一个TypeError : 'DataFrame' object is not callable。我还提供了Tableau接口中出现的相同错误的图像。
任何帮助都是真诚的感谢。


下面是在我的TabPy服务器上运行的实际脚本的语法--只需对Replit上的脚本进行最少的修改。
import requests;
import pandas as pd;
import json;
zip = '97034'
userToken = 'foobar123'
headerCreds = dict(token = userToken)
url = 'https://www.ncei.noaa.gov/cdo-web/api/v2/stations?&locationid=ZIP:' + zip
global dfWorking
def get_stations_for_zip():
r = requests.get(url, headers = headerCreds)
data = json.loads(r.text)
if 'results' in data:
data = data.get('results')
dfWorking = pd.DataFrame(data)
# Column datatypes as received
# elevation float64
# mindate object
# maxdate object
# latitude float64
# name int64
# datacoverage float64
# id object
# elevationUnit object
# longitude float64
dfWorking = dfWorking.astype({'name': 'str'})
# dfWorking['name'] = dfWorking.index
# defining an index converts back to float64
print(dfWorking)
else:
print('no results object in response')
return dfWorking
# Note: the below prep functions are undefined until they are on a TabPy server
def get_output_schema():
return pd.DataFrame({
'elevation' : prep_decimal(),
'mindate' : prep_string(),
'maxdate' : prep_decimal(),
'latitude' : prep_date(),
'name' : prep_string(),
'datacoverage' : prep_decimal(),
'id' : prep_decimal(),
'name' : prep_string(),
'elevationUnit' : prep_decimal(),
'longitude' : prep_decimal()
});
get_stations_for_zip()发布于 2022-11-24 16:17:41
该解决方案需要进行两项更改:
get_stations_for_zip(),但需要不带括号的get_stations_for_zip

get_stations_for_zip函数需要以"df“(对于dataframe)作为参数。所以def get_stations_for_zip(df):。奇怪的是,这个参数从未在函数中使用过,但是它是必要的,我所引用的博客也是如此。以下是Hel.tableau.com的文章在流中使用Python脚本的引文
创建脚本时,包括一个指定熊猫(pd.DataFrame)作为函数参数的函数。这将调用中的数据。
发布于 2022-11-23 22:43:47
这句话是错的:
execution_result = get_stations_for_zip()(pd.DataFrame(_arg1))因为get_stations_for_zip正在返回DataFrame,因此您正在将其作为python函数进行升级,因此您正在尝试:
df = get_stations_for_zip()
df(pd.DataFrame(_arg1)) # and error is right herehttps://stackoverflow.com/questions/74553651
复制相似问题