【发布时间】:2022-02-10 17:46:38
【问题描述】:
我目前正在处理一个数据库表,该表的主键 ID 最多为 28 位。 对于我的用例,我需要操作此表中的一些数据点(包括 ID)并将其写回 db 表。
现在,对于 ID,我需要将其递增 1,而我正在努力使用 pandas 和 windows 来实现这一点。 不幸的是,很明显,我无法读取 ID 并将其保存为数据框中的纯整数。 事先将其转换为 np.float64 似乎完全弄乱了这些值。
例如:
我正在使用 ID 2021051800100770010113340000 操作数据点
如果我通过显式提供此列的 dtype 将 ID 列转换为 np.float64,
ID 变为2021051800100769903675441152.0,这似乎是一个完全不同的数字。
另外我不知道将 ID 列增加 1 是否有效,因为结果将与上面的数字相同。
有没有办法以适当的方式解决这个问题?我的最后一个选择是将其转换为字符串,然后更改该字符串的最后一个子字符串。但我觉得这不是一个好的和干净的解决方案。更不用说我不确定我是否可以以那种形式将它写回数据库。
编辑//
基于此建议 (https://stackoverflow.com/a/21591439/3856569)
我通过以下方式编辑了 ID 列:
df["ID"] = df["ID"].apply(int)
然后增加数字。
我得到以下结果:
2021051800100769903675441152 2021051800100769903675441153
所以增量现在似乎起作用了,但我仍然看到与我最初得到的完全不同的数字。
【问题讨论】:
-
那你为什么要把你的ID转换成
float呢?只需使用int。对于绝对可靠的值,浮点数并不是一个好主意。 -
在我知道我在编辑中发布的选项之前,转换为 float 是我将自动检测到的
Objectdtype 转换为我可以递增的 dtype 的唯一方法ID。