Pandas/Polars: запись списка JSON в базу данных завершается с ошибкой: `ndarray не сериализуется в формате json`Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pandas/Polars: запись списка JSON в базу данных завершается с ошибкой: `ndarray не сериализуется в формате json`

Сообщение Anonymous »

У меня есть несколько столбцов json, которые я объединяю в массив столбцов json.
DataFarme выглядит следующим образом
┌─────────────────────────────────┐
│ json_concat │
│ --- │
│ list[str] │
╞═════════════════════════════════╡
│ ["{"integer_col":52,"string_co… │
│ ["{"integer_col":93,"string_co… │
│ ["{"integer_col":15,"string_co… │
│ ["{"integer_col":72,"string_co… │
│ ["{"integer_col":61,"string_co… │
│ ["{"integer_col":21,"string_co… │
│ ["{"integer_col":83,"string_co… │
│ ["{"integer_col":87,"string_co… │
│ ["{"integer_col":75,"string_co… │
│ ["{"integer_col":75,"string_co… │
└─────────────────────────────────┘

Вот результат полярного проблеска
Rows: 10
Columns: 1
$ json_concat ['{"integer_col":52,"string_col":"v"}', '{"float_col":86.61761457749351,"bool_col":true}', '{"datetime_col":"2021-01-01 00:00:00","categorical_col":"Category3"}'], ['{"integer_col":93,"string_col":"l"}', '{"float_col":60.11150117432088,"bool_col":false}', '{"datetime_col":"2021-01-02 00:00:00","categorical_col":"Category2"}'], ['{"integer_col":15,"string_col":"y"}', '{"float_col":70.80725777960456,"bool_col":false}', '{"datetime_col":"2021-01-03 00:00:00","categorical_col":"Category1"}'], ['{"integer_col":72,"string_col":"q"}', '{"float_col":2.0584494295802447,"bool_col":true}', '{"datetime_col":"2021-01-04 00:00:00","categorical_col":"Category2"}'], ['{"integer_col":61,"string_col":"j"}', '{"float_col":96.99098521619943,"bool_col":true}', '{"datetime_col":"2021-01-05 00:00:00","categorical_col":"Category2"}'], ['{"integer_col":21,"string_col":"p"}', '{"float_col":83.24426408004217,"bool_col":true}', '{"datetime_col":"2021-01-06 00:00:00","categorical_col":"Category2"}'], ['{"integer_col":83,"string_col":"o"}', '{"float_col":21.233911067827616,"bool_col":true}', '{"datetime_col":"2021-01-07 00:00:00","categorical_col":"Category1"}'], ['{"integer_col":87,"string_col":"o"}', '{"float_col":18.182496720710063,"bool_col":true}', '{"datetime_col":"2021-01-08 00:00:00","categorical_col":"Category2"}'], ['{"integer_col":75,"string_col":"s"}', '{"float_col":18.34045098534338,"bool_col":true}', '{"datetime_col":"2021-01-09 00:00:00","categorical_col":"Category1"}'], ['{"integer_col":75,"string_col":"l"}', '{"float_col":30.42422429595377,"bool_col":true}', '{"datetime_col":"2021-01-10 00:00:00","categorical_col":"Category2"}']

Я хочу записать столбец json в таблицу под названием «тестирование». Я попробовал как pd.DataFrame.to_sql(), так и pl.DataFrame.write_database(), оба не удались с похожей ошибкой
Ошибка
Важной частью является следующее: sqlalchemy.exc.StatementError: (builtins.TypeError) Объект типа ndarray не является сериализуемым в формате JSON
File "/usr/lib/python3.10/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
sqlalchemy.exc.StatementError: (builtins.TypeError) Object of type ndarray is not JSON serializable
[SQL: INSERT INTO some_schema.testing (json_concat) VALUES (%(json_concat)s)]
[parameters: [{'json_concat': array(['{"integer_col":52,"string_col":"v"}',
'{"float_col":86.61761457749351,"bool_col":true}',
'{"datetime_col":"2021-01-01 00:00:00","categorical_col":"Category3"}'],
dtype=object)},
# ... abbreviated
dtype=object)}, {'json_concat': array(['{"integer_col":75,"string_col":"l"}',
'{"float_col":30.42422429595377,"bool_col":true}',
'{"datetime_col":"2021-01-10 00:00:00","categorical_col":"Category2"}'],
dtype=object)}]]

Код, выдающий ошибку
(пример для панд)
df_pandas.to_sql(
"testing",
con=engines.engine,
schema=schema,
index=False,
if_exists="append",
dtype=DTYPE,
)

Вопрос
Как мне подготовить объединенный столбец json, чтобы его можно было сериализовать в формате json?
MRE (Создать пример данных)
from typing import Any
import numpy as np
import pandas as pd
import polars as pl
from myengines import engines
from sqlalchemy import dialects, text

schema = "some_schema"
# Seed for reproducibility
np.random.seed(42)

n = 10

# Generate random data
integer_col = np.random.randint(1, 100, n)
float_col = np.random.random(n) * 100
string_col = np.random.choice(list("abcdefghijklmnopqrstuvwxyz"), n)
bool_col = np.random.choice([True, False], n)
datetime_col = pd.date_range(start="2021-01-01", periods=n, freq="D")
categorical_col = np.random.choice(["Category1", "Category2", "Category3"], n)

# Creating the DataFrame
df = pl.DataFrame(
{
"integer_col": integer_col,
"float_col": float_col,
"string_col": string_col,
"bool_col": bool_col,
"datetime_col": datetime_col,
"categorical_col": categorical_col,
}
)

df = df.select(
pl.struct(pl.col("integer_col", "string_col")).struct.json_encode().alias("json1"),
pl.struct(pl.col("float_col", "bool_col")).struct.json_encode().alias("json2"),
pl.struct(pl.col("datetime_col", "categorical_col"))
.struct.json_encode()
.alias("json3"),
).select(pl.concat_list(pl.col(["json1", "json2", "json3"])).alias("json_concat"))

DTYPE: dict[str, Any] = {"json_concat": dialects.postgresql.JSONB}


Подробнее здесь: https://stackoverflow.com/questions/790 ... s-not-json
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Pandas/Polars: запись списка JSON в базу данных завершается с ошибкой: `ndarray не сериализуется в формате json`
    Anonymous » » в форуме Python
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Pandas/Polars: запись списка JSON в базу данных завершается с ошибкой: `ndarray не сериализуется в формате json`
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Чтение/запись фрейма данных Polars со столбцом списка из/в базу данных
    Anonymous » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray
    Anonymous » » в форуме Python
    0 Ответы
    728 Просмотры
    Последнее сообщение Anonymous
  • Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray
    Anonymous » » в форуме Python
    0 Ответы
    102 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»