You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新环境下Python代码报TypeError: Cannot convert numpy.ndarray to numpy.ndarray求助

问题描述

全新安装Windows系统与PyCharm后,运行之前可正常工作的Python代码时,在最后一行创建pd.DataFrame时抛出错误:TypeError: Cannot convert numpy.ndarray to numpy.ndarray,此错误令人困惑,因为本不需要进行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
问题分析与解决

这个错误属于版本兼容性问题,从报错路径能看到你使用的是Python 3.12,而早期版本的pandas对Python 3.12的适配存在缺陷,或者numpy与pandas版本不匹配导致类型转换逻辑冲突。以下是几种解决方式:

  • 调整Python版本:将Python版本降级到3.11及以下,旧版本Python与大多数成熟库的兼容性更稳定,这也是之前代码能正常运行的环境大概率使用的版本。
  • 升级pandas到适配版本:pandas 2.1.0及以上版本开始正式支持Python 3.12,执行命令升级:
    pip install --upgrade pandas
    
  • 简化代码避免类型转换:不需要手动将列表转为numpy数组,pandas可以直接接收列表创建DataFrame,删除代码中所有np.array()转换行即可:
    # 移除以下四行转换代码
    # storeemployee = np.array(storeemployee)
    # regionalemployee = np.array(regionalemployee)
    # regionid = np.array(regionid)
    # storeid = np.array(storeid)
    
    # 直接用原始列表构建DataFrame
    data = {'StoreMerchandiserEmployeeId': storeemployee, 'RegionalMerchandiserEmployeeId': regionalemployee,
            "R_Num": regionid, "StoreId":storeid}
    FinalData = pd.DataFrame(data, columns=['StoreMerchandiserEmployeeId', 'RegionalMerchandiserEmployeeId', 'R_Num', 'StoreId'])
    
  • 同步升级numpy:确保numpy与pandas版本兼容,执行命令:
    pip install --upgrade numpy
    

额外优化建议

可以直接使用pandas的read_sql方法读取数据库数据,无需手动循环拼接列表,代码更简洁且不易出错:

with engine.connect() as connection:
    query = SQL.text("SELECT StoreId, R_Num, RegionalMerchandiserEmployeeId, StoreMerchandiserEmployeeId from Staging.StoreMerchandiserInput")
    FinalData = pd.read_sql(query, connection)
    # 若需要调整列顺序,使用reindex
    FinalData = FinalData.reindex(columns=['StoreMerchandiserEmployeeId', 'RegionalMerchandiserEmployeeId', 'R_Num', 'StoreId'])

内容的提问来源于stack exchange,提问作者Carter Lowe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:44:57