【问题标题】:Convert pandas Dataframe to python native int将 pandas Dataframe 转换为 python 本机 int
【发布时间】:2021-10-11 21:37:23
【问题描述】:

出现问题的版本:

python 3.6.13 
pandas 1.1.5 
numpy 1.19.2

这似乎微不足道,但到目前为止我找不到令人满意的解决方案。首先,在加载到 SQL 数据库之前,我将数据导入到 pandas Dataframe。我得到的失败信息是:

ProgrammingError: (pyodbc.ProgrammingError) ('Invalid parameter type.  param-index=0 param-type=numpy.int64', 'HY105')

显然,要将数据帧放入数据库,dtype 不能是 numpy.int64 并且必须是 int。我在这里找到了解决方案: "Invalid parameter type" (numpy.int64) when inserting rows with executemany()

这是目标列dtype的截图:

我发现让数据成为 dtype int 的唯一方法是原生函数 int(),但它只能用于奇异值。

numpy 方法 .astype(int) 出于某种原因只转换为 numpy.int32:

df = pd.DataFrame(data=[[1,4,5], [2, 'nan', 4]], columns=['A', 'B', 'C'])
df[['A', 'C']] = df[['A', 'C']].astype(int)
df.info()

.info() 方法以及检查单个值的类型都会为我生成 int32。

有人可以告诉我如何将整个数据框转换为本地 int 以便我可以导入到我的数据库中吗?

【问题讨论】:

  • DataFrame 的底层数据结构将是有效的 numpy 类型之一或object(即使使用一些 pandas 实验类型)。从 pandas 到 sql 的传输协议中通常有一些可用的配置。您没有提供有关如何尝试从 pandas 导出到 SQL 的代码,也没有提供表模式。这将有助于确定可用的选项。
  • 更新问题!
  • df.to_numpy().tolist() 应该生成一个整数列表列表。也可能有df.to_list()方法
  • 我在下面提到,我需要数据框中的值进行进一步的步骤。当我尝试将数据框列分配给这些生成的列表时,它会转换回 int64
  • 您可以尝试改为字符串,让数据库将输入的字符串解析为适当的类型。

标签: python sql pandas numpy


【解决方案1】:

您应该知道您的数据库使用哪个 int 位长度并使用适当的类型进行转换:np.int8/np.int16/np.int32/np.int64

例子:

import numpy as np
df['col'].astype(np.int8)

【讨论】:

  • 在 Microsoft SQL 服务器中,值类型是 int。它也被拒绝了 np.int32 和 np.int64。这就是为什么我认为它不能是 numpy dtype。
  • int 没有任何意义本身,有不同类型的位长,你试过np.int16和np.int8吗?
  • 两者都以相同的响应失败。 param-type=numpy.intXX 分别。
  • 您可以使用df[['A', 'C']].values.tolist() 获取python int 列表
  • 确实如此,但我需要数据框中的值进行进一步的步骤。当我尝试将数据框列分配给这些生成的列表时,它会转换回 int64
猜你喜欢
  • 1970-01-01
  • 2021-11-06
  • 2017-03-17
  • 2017-03-23
  • 2018-03-11
  • 2017-04-13
  • 2021-03-29
  • 2017-04-27
相关资源
最近更新 更多