Ошибка типа: невозможно преобразовать numpy.ndarray в numpy.ndarray

Я не уверен, почему, но после новой установки Windows и новой установки pycharm у меня возникли проблемы с запуском некоторого ранее функционального кода. Теперь я получаю вышеуказанную ошибку с приведенным ниже кодом. Это проблема с настройкой или что-то изменилось, из-за чего этот код теперь не работает? Ошибка возникает в последней строке. Для меня эта ошибка не имеет смысла, поскольку преобразование ndarray в ndarray не требуется.

import numpy as np
import pyodbc
import pandas as pd
import sqlalchemy as SQL
import torch
import datetime

# Setup your SQL connection
server = [hidden for security]
database = [hidden for security]
username = [hidden for security]
password = [hidden for security]
# This is using the pyodbc connection
cnxn = pyodbc.connect(
    'DRIVER = {SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
cursor = cnxn.cursor()
# This is using the SQLAlchemy connection
engine_str = SQL.URL.create(
    drivername = "mssql+pyodbc",
    username=username,
    password=password,
    host=server,
    port=1433,
    database=database,
    query = {
        "driver": "ODBC Driver 17 for SQL Server",
        "TrustServerCertificate": "no",
        "Connection Timeout": "30",
        "Encrypt": "yes",
    },
)
engine = SQL.create_engine(engine_str)

storeemployee = []
regionalemployee = []
regionid = []
storeid = []

# get table from dev
with engine.connect() as connection:
    result = connection.execute(SQL.text("SELECT StoreId, R_Num, RegionalMerchandiserEmployeeId, StoreMerchandiserEmployeeId from Staging.StoreMerchandiserInput"))
    for row in result:
        # set your variables = to the results
        storeemployee.append(row.StoreMerchandiserEmployeeId)
        regionalemployee.append(row.RegionalMerchandiserEmployeeId)
        regionid.append(row.R_Num)
        storeid.append(row.StoreId)
storeemployee = np.array(storeemployee)
regionalemployee = np.array(regionalemployee)
regionid = np.array(regionid)
storeid = np.array(storeid)

# StoreMerchandiserEmail
data = {'StoreMerchandiserEmployeeId': storeemployee, 'RegionalMerchandiserEmployeeId': regionalemployee,
        "R_Num": regionid, "StoreId":storeid}
FinalData = pd.DataFrame(data, columns=['StoreMerchandiserEmployeeId', 'RegionalMerchandiserEmployeeId', 'R_Num', 'StoreId'])

Редактировать - Полное сообщение об ошибке:

Traceback (most recent call last):
  File "C:\Users\Carter.Lowe\Documents\Python Files\Data Import 2.py", line 56, in <module>
    FinalData = pd.DataFrame(data, columns=['StoreMerchandiserEmployeeId', 'RegionalMerchandiserEmployeeId', 'R_Num', 'StoreId'])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\frame.py", line 778, in __init__
    mgr = dict_to_mgr(data, index, columns, dtype=dtype, copy=copy, typ=manager)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\internals\construction.py", line 443, in dict_to_mgr
    arrays = Series(data, index=columns, dtype=object)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\series.py", line 490, in __init__
    index = ensure_index(index)
            ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\indexes\base.py", line 7647, in ensure_index
    return Index(index_like, copy=copy, tupleize_cols=False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\indexes\base.py", line 565, in __new__
    arr = sanitize_array(data, None, dtype=dtype, copy=copy)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\construction.py", line 654, in sanitize_array
    subarr = maybe_convert_platform(data)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Carter.Lowe\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\dtypes\cast.py", line 139, in maybe_convert_platform
    arr = lib.maybe_convert_objects(arr)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "lib.pyx", line 2538, in pandas._libs.lib.maybe_convert_objects
TypeError: Cannot convert numpy.ndarray to numpy.ndarray

полное сообщение об ошибке, пожалуйста. Может быть полезно увидеть один или несколько массивов в data. Мы не можем воссоздать ваши данные, поэтому вам придется предоставить отладочную информацию (если вам действительно нужна помощь :) )

hpaulj 23.05.2024 19:44

@hpaulj добавил сообщение об ошибке в конец сообщения.

Carter Lowe 23.05.2024 19:52

Какие типы данных могут принимать переменные storeemployee, regionalemployee, regionid, storeid перед преобразованием в массивы NumPy? Не могли бы вы добавить некоторые команды, чтобы проверить их размеры и убедиться в несоответствии размеров? Пробовали ли вы скомпилировать DataFrame, сохраняя эти переменные в виде списков?

TheEponymousProgrammer 23.05.2024 20:03

@TheEponymousProgrammer, если я возьму часть np.array(), я получу ту же ошибку. эти переменные до того, как они были установлены в массивы NumPy, входят в список классов.

Carter Lowe 23.05.2024 20:11

Кроме того, все они имеют одинаковую длину (771).

Carter Lowe 23.05.2024 21:05

Спасибо за дополнительную информацию, она очень полезна! Я пытался смоделировать вашу ситуацию, но не смог ее воспроизвести. В качестве ответа я опубликовал тестовый сценарий, и если бы вы могли запустить его и проверить, работает ли он у вас, это было бы очень полезно для решения вашей проблемы!

TheEponymousProgrammer 23.05.2024 21:56

Если бы у меня был ваш SQL, я бы проверил форму и тип четырех массивов, а затем попытался создать фрейм данных с подмножеством из четырех, чтобы определить, какой из них вызывает проблемы. То есть классический подход к отладке по принципу «разделяй и властвуй».

hpaulj 23.05.2024 22:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
2 142
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я попытался создать простую симуляцию вашей проблемы, но не смог ее повторить. Я подозреваю, что это может быть проблема с вашим типом данных или проблема с установкой панд.

Не могли бы вы попробовать запустить следующий пример, который я создал, в вашей среде и посмотреть, успешно ли он генерирует DataFrame Pandas? Если это так, то с вашей установкой все в порядке, и вы, возможно, захотите просмотреть и изучить типы данных более подробно.

# Version Information
# Python:   3.11.9
# Pandas:   2.2.2
# NumPy:    1.26.4

# Import modules
import pandas as pd
import numpy as np
import random
import string

# Create lists of different data types to test
num_items = 20

# Generate arrays
list1 = np.asarray([np.random.randint(0, 10) for n in range(num_items)])  # Integers
list2 = np.asarray([random.choice(string.ascii_letters) for n in range(num_items)])  # Strings
list3 = np.asarray([np.random.random() for n in range(num_items)])  # Floats
print(
    f"Array 1: {list1} \n"
    f"Shape: {np.shape(list1)} \n"
    f"Array 2: {list2} \n"
    f"Shape: {np.shape(list2)} \n"
    f"Array 3: {list3} \n"
    f"Shape: {np.shape(list3)} \n"
)

# Save as dict and convert to Pandas DataFrame
data = {
    "ints": list1,
    "strs": list2,
    "flts": list3,
}
dataframe = pd.DataFrame(data, columns=["ints", "strs", "flts",])
print(dataframe)

оказалась проблема с установкой numpy

Carter Lowe 24.05.2024 15:29

Хорошо, спасибо, что сообщили мне, и рад, что проблема разрешилась!

TheEponymousProgrammer 24.05.2024 15:45

Если у вас установлены две разные версии, например, одна через pip, а другая через conda, эта проблема будет поднята. Удалил оба, а затем установил рекомендованный.

user238607 12.07.2024 14:02
Ответ принят как подходящий

У меня сегодня была такая же ошибка, и я решил ее, обновив numpy до 2.0.0rc2.

Это решило мою проблему. Я также переустановил Python.

Carter Lowe 24.05.2024 15:29

Встретился с той же проблемой с numpy==1.23.5, решено обновлением до 1.26.4.

У меня было понижение версии панд с 2.2.0 до 2.1.4.

Другие вопросы по теме