首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当工作Python脚本从Replit移动到本地TabPy服务器时不可调用的Dataframe对象

当工作Python脚本从Replit移动到本地TabPy服务器时不可调用的Dataframe对象
EN

Stack Overflow用户
提问于 2022-11-23 22:31:58
回答 2查看 32关注 0票数 0

我编写了一个Python脚本,它用邮政编码调用了国家海洋和大气管理局(NOAA)端点,并得到了相应的气象站列表。然后,脚本将响应转换为。

我相信我已经根据这个复裂.The数据格式正确地工作了,并且我可以使用断点检查它。

使用这个博客教程作为我的指南,我的真正目标是在Tableau流中利用这个Python。Tableau基本上是一个桌面ETL工具,类似于PowerQuery,但不同的是:)。

我有一个TabPy服务器的本地工作实例,它的日志似乎也显示了数据文件的正确构造(如下图)。然而,我得到了一个TypeError : 'DataFrame' object is not callable。我还提供了Tableau接口中出现的相同错误的图像。

任何帮助都是真诚的感谢。

下面是在我的TabPy服务器上运行的实际脚本的语法--只需对Replit上的脚本进行最少的修改。

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2022-11-24 16:17:41

该解决方案需要进行两项更改:

  1. 在Tableau接口中,声明函数名的是get_stations_for_zip(),但需要不带括号的get_stations_for_zip

  1. 在我的脚本中,get_stations_for_zip函数需要以"df“(对于dataframe)作为参数。所以def get_stations_for_zip(df):。奇怪的是,这个参数从未在函数中使用过,但是它是必要的,我所引用的博客也是如此。

以下是Hel.tableau.com的文章在流中使用Python脚本的引文

创建脚本时,包括一个指定熊猫(pd.DataFrame)作为函数参数的函数。这将调用中的数据。

票数 1
EN

Stack Overflow用户

发布于 2022-11-23 22:43:47

这句话是错的:

代码语言:javascript
复制
execution_result = get_stations_for_zip()(pd.DataFrame(_arg1))

因为get_stations_for_zip正在返回DataFrame,因此您正在将其作为python函数进行升级,因此您正在尝试:

代码语言:javascript
复制
df = get_stations_for_zip()
df(pd.DataFrame(_arg1)) # and error is right here
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74553651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档