因此,我使用None
对象在pandas数据框中定义了空值。
这是数据框中具有NaN
和None
27 XXX None 41.0 NaN 1.0 50.0 NaN 1.0 71.0 3.0 0.9826382611 162.0 3.0 0.9952958893 MTD
当我在数据帧中插入None
时,它变成NaN
,然后插入到 Teradata 中的一个小整数字段中时,出现插入错误。如何告诉teradata使用python将那些NaN
插入到teradata中的空值?
计算过程中发生数字溢出。
在下面的示例中,参数8为NaN
Insert Exception in function insertDtframe, activated rollback: [Version 16.20.0.54] [Session 2258656] [Teradata SQL Driver] [Error 502] Batch row 3 bound parameter 8 type VARCHAR (448) differs from batch row 1 type FLOAT (480)
at gosqldriver/teradatasql.(*teradataConnection).makeDriverErrorCode TeradataConnection.go:1074
at gosqldriver/teradatasql.(*TeradataRows).validateBatchValues TeradataRows.go:947
at gosqldriver/teradatasql.newTeradataRows TeradataRows.go:361
at gosqldriver/teradatasql.(*teradataStatement).QueryContext TeradataStatement.go:122
at gosqldriver/teradatasql.(*teradataConnection).QueryContext TeradataConnection.go:2036
at database/sql.ctxDriverQuery ctxutil.go:48
at database/sql.(*DB).queryDC.func1 sql.go:1464
at database/sql.withLock sql.go:3032
at database/sql.(*DB).queryDC sql.go:1459
at database/sql.(*Conn).QueryContext sql.go:1701
at main.goCreateRows goside.go:599
at main._cgoexpwrap_e6e101e164fa_goCreateRows _cgo_gotypes.go:331
at runtime.call64 asm_amd64.s:574
at runtime.cgocallbackg1 cgocall.go:316
at runtime.cgocallbackg cgocall.go:194
at runtime.cgocallback_gofunc asm_amd64.s:826
at runtime.goexit asm_amd64.s:2361
Completed Time: 2019-12-04 15:41:06.967610
答案 0 :(得分:0)
按照弗雷德的建议,使用函数pandas.notnull
将NaN
替换为None
最初,当您向 pandas 插入None
对象时,它将替换为NaN
。如果要插入数据库,则需要将这些NaN
转换为None
。这是因为数据库会认为您正在插入字符串,尤其是在整数数据类型字段上。以下是将NaN
转换为任何特定值的代码。在我的情况下,应为None
。
cNoneDtframe = parsedDtframe.where((pandas.notnull(parsedDtframe)), None)