Невозможно преобразовать numpy dtypes в его собственные типы Python (int64 в int) - PullRequest
0 голосов
/ 21 декабря 2018

Пожалуйста, проверьте приведенный ниже код, я хочу преобразовать 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, и я получил следующую ошибку

'Ошибка типа: объект типа' 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

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Похоже, что 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

0 голосов
/ 21 декабря 2018

Для преобразования numpy dtypes в родные dtypes Python у вас есть два варианта:

Опция 1:

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

Опция 2:

np.asscalar(sum_Credit_Bal['No. of transactions'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...