【发布时间】:2021-09-24 07:05:47
【问题描述】:
我已经推荐了this post、this post、this post。所以,请不要标记为重复
我在 pandas 数据框中有一个原始数据,名为 temp_id,如下所示。
由于 NA,该列的数据类型为 float64,如下图 jupyter notebook 所示
temp_id
55608.0
55609.0
NaN
55610.0
NaN
55611.0
在csv文件中,同一列如下图所示
temp_id
55608
55609
#empty row indicating NA
55610
#empty row indicating NA
55611
我正在尝试将此数据复制到具有下表定义的 postgresql 表中。请注意,它不是主键,可以有空行
CREATE TABLE temp(
temp_id integer
);
当我尝试复制数据时,出现以下错误
ERROR: invalid input syntax for integer: "55608.0"
CONTEXT: COPY temp, line 2, column temp_id: "55608.0"
如何避免这种情况并将这些数据插入到 Postgresql 表的整数列中?下面是我在import csvimport csvpgadmin 中给出的杂项字符
【问题讨论】:
-
您是否尝试在插入前通过
.astype(int)将列转换为整数?该错误似乎表明浮点数中的小数点存在问题 -
如果我尝试将其转换为
pandas,则会引发错误,因为该列具有na值。所以无法转换为int。 -
DataFrame 列可以混合类型,但 dtype 将被读取为“object”。用 SQL 数据库中使用的字符串“NULL”代替 NaN 替换 None 值。然后,过滤你的数值并使用
astype将它们转换为int。 -
@LukasThaler - 我收到此错误
ValueError: Cannot convert non-finite values (NA or inf) to integer -
因为您或其他进程可能正在使用 numpy 或 pandas。
NaN是浮点值,但 int 值没有NaN。换一种说法:试图用1, 2, 3.1建立一个列,计算机将假定整个列是一个浮点数。由于NaN仅存在于浮点数中,因此整列变为一。
标签: python sql postgresql psycopg2 pgadmin