1

请检查下面的代码,我想将 dtype int64 转换为其本机 python 类型 int。

dfCredit = pd.DataFrame(credits_List)
dfCredit['date'] = pd.to_datetime(dfCredit['date'], format='%d-%m-%Y')
sum_Credit_Bal = dfCredit.groupby(pd.Grouper(key='date', freq='1M')).sum()
avg_Credit_Bal = dfCredit.groupby(pd.Grouper(key='date', freq='1M')).mean()
avg_Credit_Bal['No. of transactions'] = sum_Credit_Bal['No. of transactions'].astype(int)
print("--------------")
print("\nAverage amount Credited per month :\n\n ", avg_Credit_Bal)
print("--------------")
print(avg_Credit_Bal.dtypes)


js =  [{"Average amount Credited per month": avg_Credit_Bal.to_dict()}]
s3object = s3.Object("bank-statement-demo","BankOutput.json")
s3object.put(Body=(bytes(json.dumps(js).encode('UTF-8'))))

我试图在 amazon lambda 服务中运行我的代码,但出现以下错误

'TypeError:'int64' 类型的对象不是 JSON 可序列化的'。这就是为什么我需要将它转换成它的原生 python 类型

输出

Average amount Credited per month :

                Credit  No. of transactions
Month                                    
Jun-18   4644.500000                    4
Jul-18  11142.000000                    2
Aug-18  12148.750000                    4
Sep-18   2830.477143                    7
Oct-18   4664.250000                    4
Nov-18   8381.500000                    2
--------------
Credit                 float64
No. of transactions      int64
dtype: object

预期答案

No. of transactions      int
4

2 回答 2

1

因此,Amazon s3 似乎对 dtypes 有点敏感,因此为了使其兼容,您可以先转换为int然后再转换为object兼容:

avg_Credit_Bal['No. of transactions'] = sum_Credit_Bal['No. of transactions'].astype(int).astype(object)

如果您查看元素的类型,它将输出object指示它是通用 python 对象:

type(avg_Credit_Bal['No. of transactions'][0])

将输出object

于 2018-12-24T13:31:23.467 回答
0

要将 numpy dtypes 转换为本机 Python dtypes,您有两种选择:

选项1:

sum_Credit_Bal['No. of transactions'].item()

选项 2:

np.asscalar(sum_Credit_Bal['No. of transactions'])
于 2018-12-21T15:01:09.973 回答