如何忽略熊猫 to_sql 中损坏的行

use*_*505 5 postgresql python-3.x pandas

我使用to_sql()将熊猫数据帧保存到 postgres db 表。如果其中一行的格式不正确,则会引发 psycopg2.DataError 并且不会保存整个数据帧。我试图捕捉错误并使用 chunksize = 1 一一保存行,但结果是一样的。如何忽略损坏的行?这是我使用的代码:

from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://postgres@localhost/db_name')
df = pd.read_csv(filename, chunksize=CHUNKSIZE, error_bad_lines=False)
for chunk in df:
    try:
        chunk.to_sql(TABLE_NAME, con=engine,)
    except:
        chunk.to_sql(TABLE_NAME, con=engine, chunksize=1)
Run Code Online (Sandbox Code Playgroud)

我希望 to_sql 只忽略损坏的行并保存所有其他行。是否可以实现?当前的解决方法是将数据帧拆分为更小的部分并一一保存。虽然它很贵。

Ser*_*nes 0

我建议采用与您类似的方法,但有一些例外:

def insert_data(df, table_name):
    try: 
        df.to_sql(table_name, con=engine, if_exists='append', index=False)
    except Exception as error:
        print(error) 
        df.to_sql(table_name, con=engine, if_exists='append', index=False, chunksize=1000)
Run Code Online (Sandbox Code Playgroud)