9

pandasdataFrameをSQLitedbに書き込む方法を学んでいます。

私は1つのサンプルコードを使用しました:

import pandas as pd
import pandas.io.sql as pd_sql
import sqlite3 as sql

con = sql.connect("/home/msalese/Documents/ipyNotebooks/tmp.db")
df =pd.DataFrame({'TestData':[1,2,3,4,5,6,7,8,9]})
pd_sql.write_frame(df, "tbldata2", con)

しかし、上記のコードでは例外が発生します。

---------------------------------------------------------------------------
InterfaceError                            Traceback (most recent call last)
<ipython-input-31-c844f7e3f2e6> in <module>()
----> 1 pd_sql.write_frame(df, "tbldata2", con)

/opt/epdFree7.3.2/lib/python2.7/site-packages/pandas-0.10.1-py2.7-linux-x86_64.egg/pandas/io/sql.pyc in write_frame(frame, name, con, flavor, if_exists, **kwargs)
208     if func is None:
209         raise NotImplementedError
--> 210     func(frame, name, safe_names, cur)
211     cur.close()
212     con.commit()

/opt/epdFree7.3.2/lib/python2.7/site-packages/pandas-0.10.1-py2.7-linux-x86_64.egg/pandas/io/sql.pyc in _write_sqlite(frame, table, names, cur)
219         table, col_names, wildcards)
220     data = [tuple(x) for x in frame.values]
--> 221     cur.executemany(insert_query, data)
222 
223 def _write_mysql(frame, table, names, cur):

InterfaceError: Error binding parameter 0 - probably unsupported type.

問題はコード行220にあると思います。試してみると:

[tuple(x) for x in df.values]

結果は次のとおりです。

[(1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,)]

コンマはsqliteデータベースにノイズを与える可能性があります。

よくわかりませんが、誰かにヒントを教えてもらえますか?

4

1 に答える 1

2

コメントの@unutbuからの回答を参照してください。

float dtypeを指定すると、この問題は回避されます。例えば、

df = pd.DataFrame({'TestData': [1, 2, 3, 4, 5, 6, 7, 8, 9]}, dtype='float')
于 2013-02-21T15:10:35.450 に答える