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

如何将pandas DataFrame的numpy.int64转为Python原生int

解决方案

报错的核心原因是pyodbc无法识别numpy封装的数值类型,需要将列的dtype转换为object类型,列内元素为Python原生int。下面是3种适配你当前版本环境的可行方案:

方案1:逐元素转换(适合10万行以下小数据量)

直接通过apply调用Python原生int方法逐元素转换:

# 替换target_col为你需要转换的列名
df['target_col'] = df['target_col'].apply(int)

转换后列的dtype会变为object,内部元素均为原生int类型,可直接导入数据库。

方案2:列表转换(适合10万行以上大数据量)

利用numpy数组转Python列表时自动将numpy.int64转换为原生int的特性实现高效批量转换,效率比apply高30%以上:

df['target_col'] = pd.Series(df['target_col'].to_list(), dtype='object')

方案3:to_sql导入阶段直接适配(无需提前转换数据)

如果你使用pandas的to_sql方法导入数据库,可直接通过dtype参数指定SQL字段类型,框架会自动完成类型适配,无需提前处理DataFrame:

from sqlalchemy import create_engine, Integer

# 初始化数据库连接引擎(替换为你自己的连接字符串)
engine = create_engine('mssql+pyodbc://user:password@dsn_name')

# 导入时指定目标列的类型为SQL整型
df.to_sql(
    name='你的表名',
    con=engine,
    if_exists='append',
    index=False,
    # 所有需要适配的整数列都可以在这里指定类型
    dtype={
        'target_col': Integer()
    }
)

注意事项

  • 转换前需确认目标列无NaN空值,否则转int会抛出异常,空值可先通过df['target_col'] = df['target_col'].fillna(0)填充默认值后再处理。
  • 需要批量转换多列时可直接遍历处理:
# 替换为你需要转换的所有整数列名
int_cols = ['col1', 'col2', 'col3']
for col in int_cols:
    df[col] = df[col].apply(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:24:02