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



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

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 Prep和TabPy,并按照说明正确设置了它。

然而,当我尝试从Prep运行下面代码块中的版本时,Prep流失败,我得到错误:

```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"```

如果我改为print(),即get_coef()的当前return行,则返回input,并删除get_output_schema函数:返回正确打印,输出确实会在实时预览中流到Tableau Prep,错误仍然会出现,流仍然无法工作,这令人费解。

from sklearn import linear_model
import pandas as pd
import numpy as np

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)

def get_output_schema():
return pd.DataFrame({
'Store' : prep_string(),
'Coef' : prep_decimal()
})

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

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需要双精度。

最新更新