2017-05-22 20 views
0
data.to_sql(dta, name='ib_es_minutes', con=engine, if_exists='append') 

上記のコードを使用して、pandasデータフレームをmysqlデータベースに書き込みます。時には同じ行が2回書き込まれることを除いて、うまく動作しています。ベロー 20170522 08:03:00に2行あり、これは私のインデックスの列です。 sqlalchemyがインデックスカラムが以前と同じであるかどうかをチェックして、行全体のmysqlデータベースへのエントリを無視する方法がありますか? 私はあなたが事前に自分のデータフレーム内の重複を持って推測しているSqlalchemyへの書き込み

'20170522 08:00:00', '2385.5', '2385.5', '2385.5', '2385.5', '8' 
'20170522 08:01:00', '2385.25', '2385.25', '2385.25', '2385.25', '1' 
'20170522 08:02:00', '2385.25', '2385.25', '2385', '2385', '69' 
'20170522 08:03:00', '2385.25', '2385.25', '2385.25', '2385.25', '7' 
'20170522 08:03:00', '2385.25', '2385.25', '2385', '2385.25', '335' 
'20170522 08:04:00', '2385', '2385.25', '2385', '2385.25', '30' 
+0

'if_exists = 'append''を使用しています。つまり、テーブルが存在する場合は、テーブルが存在するかどうかに関係なくデータを挿入します。おそらく、「置き換え」はあなたにとって正しいモードです。データフレームに重複もありますか? –

答えて

1

to_sqlはおそらくそれらを導入していません。データベースに書き込む前に明示的に処理することをお勧めします。例えば:あなたのサンプルで

data.drop_duplicates(subset=['date', 'timestamp'], keep='first', inplace=True) 

、あなたの2つの08:03:00行は、最後の列の値が異なります。したがって、重複タイムスタンプが発生した場合に、どの行を保持するかを暗黙的または明示的に選択する必要があります。

また、このコードの上流にいくつかの結合/マージがあると思われます。これは、あなたが思うものとまったく同じではありません。

+0

はいデータフレームに重複があります。 – manev

+0

この 'drop_duplicates'コードはあなたのために働く方法でそれらを解決しますか? 'date'と' timestamp'をそれらの列の名前に置き換えます。 –

+0

私の場合、sqlalchemyがmysqlデータベースを読み込めて、最初の列に重複があると見える場合は重複行を書き込まない方が良いでしょう。 – manev

関連する問題