Как решить ошибку «setting an array element with a sequence» при преобразовании типов данных DataFrame столбцов?

Здравствуйте.

Я извлекаю данные из базы данных MS Access в Pandas DataFrame, для дальнейшего построения графиков библиотекой Matplotlib. Извлечение данных в DataFrame осуществляется следующим кодом:
import pyodbc
conn_str = (
    r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=C:\MEGA\Programming\Data_Bases\Microsoft Access\Показания.accdb;'
    )
cnxn = pyodbc.connect(conn_str)
cursor = cnxn.cursor()

import pandas as pd
df = pd.DataFrame({
    'Дата': cursor.execute('select "Дата" from TABLE').fetchall(),
    'Электроэнергия': cursor.execute('select "Электроэнергия" from TABLE').fetchall(), 
    'Горячая вода': cursor.execute('select "Горячая вода" from TABLE').fetchall(),
    'Холодная вода': cursor.execute('select "Холодная вода" from TABLE').fetchall(),
})
df

В результате получаю:
5beaec2cebd11381062258.jpeg5beaec9a068ae510999338.jpeg

Как можно заметить все данные в DataFrame типа object и в квадратных скобках (возможно в этом причина проблемы).

Мне нужно на основе этих данных построить графики с помощью библиотеки Matplotlib. Но если я пытаюсь построить графики с этими данными, то получаю ошибку: "setting an array element with a sequence.".

Тогда я пробую изменить тип данных столбцов DataFrame:
df['Горячая вода'] = df['Горячая вода'].astype(float)

И получаю ту же ошибку: "setting an array element with a sequence.".

Если меняю тип данных на тот же (хоть и бессмысленное действие, но я попробовал):
df['Горячая вода'] = df['Горячая вода'].astype(object)

То никакой ошибки не возникает.

Как решить данную проблему?
  • Вопрос задан
  • 2097 просмотров
Решения вопроса 1
@ERAFY Автор вопроса
Решение.

Сначала осуществим подключение к базе данных MS Access.
import pyodbc
conn_str = (
    r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=C:\MEGA\Programming\Data_Bases\Microsoft Access\Показания.accdb;'
    )
cnxn = pyodbc.connect(conn_str)
cursor = cnxn.cursor()

Далее создадим пустой DataFrame и запишем в него построчно данные из MS Access.
import pandas as pd
df = pd.DataFrame(columns=['Дата', 'Электроэнергия', 'Горячая вода', 'Холодная вода'])

cursor.execute('select * from TABLE')
i=0
for row in cursor.fetchall():
    df.loc[i] = [row[0], row[1], row[2], row[3]]
    i=i+1

Всё, нужный DataFrame готов!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы