如何在列中缺少数据时大容量加载到Oracle表NaN

qacovj5a  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(104)

我正在尝试将一个框架批量加载到Oracle表中。发生以下错误:
DPY-3013:数据库类型DB_TYPE_NUMBER不支持Python类型str
逐个插入记录时不会出现错误。

Oracle表:

| 栏目名称|数据类型|
| --|--|
| 使|VARCHAR 2(20字节)|
| 模型|VARCHAR 2(20字节)|
| 重量|NUMBER|
| 年|数量(38,0)|

Python代码

import pandas as pd
import numpy as np

data = {
  'Make': ['Honda', 'Toyota', 'BMW', 'Honda'],
  'Model': ['Civic', 'Camry', 'Caravan', 'Accord'],
  'Weight': [1020.25, np.NaN, 1235.37, 940.9],
  'Year': [2021, 2023, 2019, np.NaN]
}

df = pd.DataFrame(data)

print(df)
print(df.dtypes)

try:
    with db_connection.cursor() as cursor:
        
        cursor.executemany('insert into myTable values(:1, :2, :3, :4)', df.fillna('').values.tolist()) 
         
    db_connection.commit()
 
except Exception as error:
     print(error)

字符串
请注意,浮点数NaN必须作为null值插入表中。
我尝试了df['Weight'].fillna(float('NaN'), inplace=True)df['Year'].fillna(float('NaN'), inplace=True)

kognpnkq

kognpnkq1#

您的错误消息指出您正在尝试将字符串插入NUMBER类型的列
与其将所有列的NaN值替换为空字符串,不如根据其数据类型单独处理每列:

  • NaN字符串列替换为空字符串
  • 将数值列中的NaN替换为sentinel值或特定数字
# Replace NaN in string columns with an empty string
df['Make'].fillna('', inplace=True)
df['Model'].fillna('', inplace=True)

# Replace NaN in numeric columns with a specific number or sentinel value
df['Weight'].fillna(-1, inplace=True)
df['Year'].fillna(-1, inplace=True)

字符串

相关问题