У меня есть файл, который я загрузил данные тика из Интернета. Похоже на это. Файл является относительно «большой»Как эффективно обновлять данные csv?
time,bid,bid_depth,bid_depth_total,offer,offer_depth,offer_depth_total
20150423T014501,81.79,400,400,81.89,100,100
20150423T100001,81.,100,100,84.36,100,100
20150423T100017,81.,100,100,83.52,500,500
20150423T115258,81.01,500,500,83.52,500,500
...
Затем я хочу индексировать данные, так что я могу получить доступ к нему через тип запроса времени:
from pylab import *
from pandas import *
import pandas.io.date_converters as conv
XLE = read_csv('XLE.csv') # Chunking seems somewhat kludy XLE = pd.read_csv('XLE.csv', chunksize=4)
#preferred something like XLE = pd.read_csv('XLE.csv', index_col=0, parse_dates=True) but can't handle this time format?
XLE = XLE.drop_duplicates(cols='time')
for i in XLE.index :
XLE [ 'time' ][ i ]= datetime.strptime (XLE [ 'time' ][ i], '%Y%m%dT%H%M%S')
XLE.index = XLE [ ' time ' ]; del XLE [ 'time']
print XLE[['bid','offer']].ix[1000:1015].to_string() # this is the goal, to be able to manipulate the data through a time index.
Мои вопросы:
- Когда Я запускаю это в оболочке, это занимает довольно много времени даже для одного файла. Я уверен, что я должен делать что-то не так в моем подходе, так как цель состоит в том, чтобы читать много файлов и объединять их в pandas DataFrame/Timeseries.
- Pandas выглядит как подход к типу памяти. Что делают люди, когда файлы (ы) действительно большие и не могут все вписаться в память? Есть ли интерфейс pandas, который скрывается от панд, где фактически хранятся данные, чтобы файл загружался и выгружался по мере необходимости с диска по мере прогрессирования вычислений?
- Кажется более логичным применить фильтр к столбцу времени, когда он считывается, а затем работать с ним позже. Есть ли способ сделать это, сообщив функции чтения, какую функцию вызывать, когда она читает столбец, до хранения объекта в памяти?
Здесь вам нужно явно указать большой/большой - позже вы подразумеваете, что не устанавливаете в памяти, но явным образом начинаю с этого. Я бы также подумал об изменении названия, так как ваш вопрос будет более конкретным, чем предполагалось в заголовке (вы можете получить доступ только к названию). Кроме того, наилучшей практикой является не импорт, а *. Для pandas pd является стандартным. – JohnE
Я изменил название. Используя команду linux wc, 17745 17745 825340 XLE.csv, и все же переиндексирование занимает много времени, и он падает, если я делаю это на слишком большом количестве файлов. У меня 8 ГБ или оперативная память. – Ivan