首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ndarray在工作脚本上不是JSON可序列化的TypeError (Tableau TabPy)

ndarray在工作脚本上不是JSON可序列化的TypeError (Tableau TabPy)
EN

Stack Overflow用户
提问于 2022-04-06 20:15:22
回答 1查看 83关注 0票数 0

我有使用测试数据的工作代码,如下所示:(示例数据匹配我以后将使用此脚本的输入类型和格式,包括日期作为附加‘Z’的字符串)

代码语言:javascript
复制
    from sklearn import linear_model
    import pandas as pd
    import numpy as np
     
     
    d = {'Start Sunday of FW': ['2022-03-02Z', '2022-03-03Z', '2022-03-04Z', '2022-03-05Z', '2022-03-06Z', '2022-03-01Z',
                  '2022-03-02Z', '2022-03-03Z', '2022-03-04Z', '2022-03-05Z', '2022-03-06Z', '2022-03-01Z'],
         'Store': [1111, 1111, 1111, 1111, 1111, 1111, 2222, 2222, 2222, 2222, 2222, 2222],
         'Sales': [3163, 4298, 2498, 4356, 4056, 3931, 3163, 4298, 2498, 4356, 4056, 1]}
     
    df = pd.DataFrame(data=d)
     
    def get_coef(input):
         def model1(df):
              y = df[['Sales']].values
              x = df[['Start Sunday of FW']].values
              return np.squeeze(linear_model.LinearRegression().fit(x,y).coef_)
     
         cnames = {'Store': 'Store', 0: 'Coef'}
     
         def prep_input(df):
              df['Start Sunday of FW'] = df['Start Sunday of FW'].astype('string').str.rstrip('Z').astype('datetime64[ns]')
              return df
     
         return pd.DataFrame(prep_input(input).groupby('Store').apply(model1)).reset_index().rename(columns=cnames)
     
    print(get_coef(df))

这段代码本身运行良好。

我安装了Tableau和TabPy,并根据指令正确设置它。

但是,当我试图从Prep在下面的代码块中运行版本时,Prep流失败了,我得到了错误:

代码语言:javascript
复制
```2022-04-06,13:08:58 [ERROR] (base_handler.py:base_handler:115): Responding with status=500, message="Error processing script", info="TypeError : Object of type ndarray is not JSON serializable"```
代码语言:javascript
复制
If I instead have it `print()` the current `return` line from `get_coef()`, return the `input` instead, and remove the `get_output_schema` function: the return is printed correctly, the output does flow to Tableau Prep in the live previews, **but** the error still raises and the flow still won't work, which is baffling.

```javascript
代码语言:javascript
复制
from sklearn import linear_model
代码语言:javascript
复制
import pandas as pd
代码语言:javascript
复制
import numpy as np
代码语言:javascript
复制
def get_coef(input):
代码语言:javascript
复制
     def model1(df):
代码语言:javascript
复制
          y = df[['Sales']].values
代码语言:javascript
复制
          x = df[['Start Sunday of FW']].values
代码语言:javascript
复制
          return np.squeeze(linear_model.LinearRegression().fit(x,y).coef_)
代码语言:javascript
复制
     cnames = {'Store': 'Store', 0: 'Coef'}
代码语言:javascript
复制
     def prep_input(df):
代码语言:javascript
复制
          df['Start Sunday of FW'] = df['Start Sunday of FW'].astype('string').str.rstrip('Z').astype('datetime64[ns]')
代码语言:javascript
复制
          return df
代码语言:javascript
复制
     return pd.DataFrame(prep_input(input).groupby('Store').apply(model1)).reset_index().rename(columns=cnames)
代码语言:javascript
复制
def get_output_schema():
代码语言:javascript
复制
     return pd.DataFrame({
代码语言:javascript
复制
          'Store' : prep_string(),
代码语言:javascript
复制
          'Coef' : prep_decimal()
代码语言:javascript
复制
     })
代码语言:javascript
复制

有人能帮我理解这个问题吗?我一开始对JSON序列化一无所知,所以像这样的帖子对我没有多大帮助;我甚至无法评估相关性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 21:04:41

代码语言:javascript
复制
result = pd.DataFrame(prep_input(input).groupby('Store').apply(model1)).reset_index().rename(columns=cnames)
     result['Coef'] = result['Coef'].astype('double')

     return result

Coef是dtype对象,TabPy需要双倍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71773107

复制
相关文章

相似问题

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