2016-08-17 193 views
5

pandas.read_sqlを実行するときに返されるdtypesを指定したいと思います。特に私はメモリを節約し、float値をnp.float32の代わりにnp.float32として返すことに興味があります。私は後でastype(np.float32)で変換できることを知っていますが、それは最初のクエリで大きなメモリ要件の問題を解決しません。私の実際のコードでは、ここに示した5行ではなく、8400万行を取得します。 pandas.read_csvではdtypesをdictとして指定できますが、read_sqlでdtypesを行う方法はありません。pandasでread_sqlのdtypesを指定する

私はMySQLdbとPython 2.7を使用しています。

read_sqlは、最終的なDataFrameストレージに必要なメモリよりもはるかに多くのメモリを使用しているようです(約2倍)。

In [70]: df=pd.read_sql('select ARP, ACP from train where seq < 5', connection) 

In [71]: df 
Out[71]: 
    ARP  ACP 
0 1.17915 1.42595 
1 1.10578 1.21369 
2 1.35629 1.12693 
3 1.56740 1.61847 
4 1.28060 1.05935 


In [72]: df.dtypes 
Out[72]: 
ARP float64 
ACP float64 
dtype: object 
+0

。 – Konstantin

答えて

1

キャスト()と変換()についてはどうですか?

'SELECT cast(ARP as float32()), cast (ACP as float32()) from train where seq < 5' 

または類似のもの。また、あなたはNaNを持っている時はいつでも浮くために、整数列の変換を避けるために良いでしょう

http://www.smallsql.de/doc/sql-functions/system/convert.html

+0

それは非常に良い提案ですが、私はそれに2つの問題が見つかりました: 1.キャストはFLOAT(https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html)を許可していません 2.たとえばDECIMAL(10,2)を試しても、read_sqlはfloat64値を返します。どのように迷惑なのですか? – SolverWorld

関連する問題