Найти - Пользователи
Полная версия: как бы обойтись без Pandas?
Начало » Python для экспертов » как бы обойтись без Pandas?
1
pmus
Добрый день, уважаемые друзья-коллеги!

У меня возник вопрос по правильному описанию структур данных.
Пишу библиотеку для того, чтобы раз и навсегда доступаться к SQLite удобным мне способом.

В частности, в классе присутствует и функция для чтения больших массивов данных:

# -*- coding: utf-8 -*-
"""
Класс для sqlite, чтобы просто работать
"""
import sqlite3
from pandas import DataFrame
class sqlite_file ():
    """
    Создание: sql = sqlite_file('test.db'), то есть указываем только имя файла
    Запись: sql.record (table = 'Имя таблицы', Поле1 = Значение1, Поле2 = Значение2)
    ... или, например:
    sql.record (table = 'config', login = 'root', password = 'bastard', enabled = 'Nope')
    """
    def __init__ (self, filename):
        self.mybase = sqlite3.connect(filename)
        self.columns = {}
        self.debug = '0'
# <--------------- Здесь кое-что пропущено -------------->
def read (self, table, **args):
        """
        Пример использования:
        mydata = sql.read (table = 'quotes', fields = ['secid', 'time', 'date', 'close', 'volume', 'oi'])
        а на выходе - таблица:
          secid   time        date   close volume    oi
        0  RIU3  11:00  27.09.2013  144741    412  1223
        1  RIU3  11:00  27.09.2013  144813    412  1223
        ...
        7  RIU3  11:00  27.09.2013  144576    412  1223
        8  RIU3  11:00  27.09.2013  144683    412  1223
        9  RIU3  11:00  27.09.2013  144874    412  1223
        """
        request = 'SELECT'
        for f in args['fields']: # Это если все, а если нет, то дописать!!!!
            request += ' [%s],' % f
        request = request[:-1] + ' FROM [%s]' % table
        try:
            sqlres = self.mybase.execute(request)
        except:
            print 'Empty table!'
            return -1
        result = []
        if sqlres:
            for res in sqlres:
                result.append (res)
            data = DataFrame (result, columns=args['fields'])
            return data

Все это сделано, чтобы было легко и просто обращаться потом с данными как с “массивом” - по номеру записи и имени столбца:

import mylib
sql = sqlite_file('test.db')
mydata = sql.read (table = 'quotes', fields = ['secid', 'time', 'date', 'close', 'volume', 'oi'])
print (mydata [0]['volume'])

Вопрос: как мне сделать то же самое, но без Pandas?
doza_and
pmus
то же самое, но без Pandas?
Ответ очевиден. Надо написать свой Pandas. Из вашего поста непонятно чем он вас не устраивает, следовательно неясно что вам посоветовать.
Например если вы импортируете данные в hdf5 Доступ будет выглядеть похоже
mydata=hdf_opened_file["volume"][0]
может это вам подойдет?

pmus
раз и навсегда доступаться к SQLite удобным мне способом.
В приведенном примере как мне показалось после беглого просмотра доступ организован не через SQLite.
Может я ошибся?
pmus
doza_and
Из вашего поста непонятно чем он вас не устраивает

Тяжелы Панды для этой моей задачи. Я просто не допёр, как сформировать структуру из списка полей fields, чтобы доступаться к ним по имени поля и номеру записи одновременно:

print (mydata [0]['volume'])

doza_and
В приведенном примере как мне показалось после беглого просмотра доступ организован не через SQLite.

Эммм…

import sqlite3
....
self.mybase = sqlite3.connect(filename)
...
sqlres = self.mybase.execute(request)

ну, как же не SQLite?
doza_and
По поводу SQLite да вы из нее данные черпаете, но вы их полностью в память засасываете. В этом случае вам вообще не важно какой источник, база, файл, ввод с консоли и т.п.
Базы тем и хороши что вы не обязаны все загружать в память.
Если вы готовы все держать в памяти то:
column_names=...
result={i:[] for i in column_names}
for vals in cursor:
   for k,v in zip(column_names,vals):
       result[k].append(v)

в результате получите словарь списков и будет вам без введения нового класса обращение
v=result["a"][0]

можно сделать и список словарей, если желаете в обратном порядке использовать индексы.
pmus
Если вы готовы все держать в памяти то:
Готов, это для биржевых данных, они мне все нужны.

Супер, это именно то, что мне нужно! Спасибо огромное!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB