「NewTable」というsqliteデータベースの既存のテーブルにPandasデータフレームを追加したいと思います。NewTableには3つのフィールド(ID、名前、年齢)があり、IDが主キーです。私のデータベース接続:
import sqlite3
DB='<path>'
conn = sqlite3.connect(DB)
追加したいデータフレーム:
test=pd.DataFrame(columns=['ID','Name','Age'])
test.loc[0,:]='L1','John',17
test.loc[1,:]='L11','Joe',30
上記のように、IDはNewTableの主キーです。キー「L1」はすでにNewTableにありますが、キー「L11」はありません。NewTableにデータフレームを追加しようとしています。
from pandas.io import sql
sql.write_frame(test,name='NewTable',con=conn,if_exists='append')
これはエラーをスローします:
IntegrityError: column ID is not unique
エラーは、キー「L1」がすでにNewTableにあるという事実に起因する可能性があります。データフレームのどちらのエントリもNewTableに追加されません。しかし、新しいキーを持つデータフレームをNewTableに問題なく追加できます。
Pandasデータフレームをsqliteテーブルに追加して、データフレーム内の新しいキーが追加されるが、テーブルにすでに存在するキーが追加されないようにする簡単な方法(ループなしなど)はありますか?
ありがとう。
SQL機能を使用できます insert or replace
query=''' insert or replace into NewTable (ID,Name,Age) values (?,?,?) '''
conn.executemany(query, test.to_records(index=False))
conn.commit()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加