2016-08-17 8 views
5

Я хотел бы указать возвращаемые типы dtypes при выполнении pandas.read_sql. В частности, меня интересует сохранение памяти и наличие значений float, возвращаемых как np.float32, а не np.float64. Я знаю, что я могу конвертировать впоследствии с помощью astype (np.float32), но это не решает проблему больших требований к памяти в исходном запросе. В моем фактическом коде я буду тянуть 84 миллиона строк, а не 5, показанных здесь. pandas.read_csv позволяет указывать dtypes как dict, но я не вижу способа сделать это с помощью read_sql.Задание типов dtypes для read_sql в pandas

Я использую MySQLdb и Python 2.7.

Как видно, read_sql использует гораздо больше памяти во время работы (около 2x), чем требуется для последнего хранилища DataFrame.

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

Что относительно cast() и convert()?

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

или что-то подобное.

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

 Смежные вопросы

  • Нет связанных вопросов^_^