【发布时间】: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
-
您可以尝试改为字符串,让数据库将输入的字符串解析为适当的类型。