Я пытаюсь обработать большой (2 гб) файл csv на машине с 4 ГБ ОЗУ (не спрашивать), чтобы создать другой, отформатированный csv, содержащий подмножество данных который нуждается в некоторой обработке. Я читаю файл и создаю HDFstore, который я запрашиваю позже для данных, которые мне нужны для вывода. Все работает, за исключением того, что я не могу извлечь данные из хранилища с помощью Term - сообщение об ошибке возвращает, что PLOT не является именем столбца. Отдельные переменные выглядят прекрасно, и магазин - это то, что я ожидаю, я просто не вижу, где ошибка. (nb pandas v14 и numpy1.9.0). Очень новичок в этом, так что извиняюсь за неуклюжий код.pandas HDF select не распознает имя столбца
#wibble wobble -*- coding: utf-8 -*-
# short version
def filesport():
import pandas as pd
import numpy as np
from pandas.io.pytables import Term
Location = r"CL_short.csv"
store = pd.HDFStore('blarg.h5')
maxlines = sum(1 for line in open (Location))
print maxlines
#set chunk small for test file
chunky=4
plotty =pd.DataFrame(columns=['PLOT'])
dfdum=pd.DataFrame(columns=['PLOT', 'mDate', 'D100'])
#read file in chunks to avoid RAM blowing up
bucket = pd.read_csv(Location, iterator=True, chunksize=chunky, usecols= ['PLOT','mDate','D100'])
for chunk in bucket:
store.append('wibble', chunk, format='table', data_columns=['PLOT','mDate','D100'], ignore_index=True)
#retrieve plot numbers and select unique items
plotty = store.select('wibble', "columns = ['PLOT']")
plotty.drop_duplicates(inplace=True)
#iterate through unique plots to retrieve data and put in dataframe for output
for index, row in plotty.iterrows():
dfdum = store.select('wibble', [Term('PLOT', '=', plotty.iloc[index]['PLOT'])])
#process dfdum for output to new csv
print("successful completion")
filesport()
Я отвечу на свой вопрос в случае кто-то еще сталкивается с проблемой и находит себя в этой темноте, одинокую угол полотна , Проблема заключается в том, что Term должен быть строкой, а числовая часть Term - числовой переменной, а не строкой. Я не мог заставить функцию str работать внутри части Term(), но это работало для индекса, строка в plotty.iterrows(): условие = 'PLOT =' + str (plotty.iloc [index] ['PLOT' ]) dfdum = store.select ('wibble', [Term (условие)]). – zarquon
для индекса, строка в plotty.iterrows(): условие = 'PLOT =' + str (plotty.iloc [index] ['PLOT']) dfdum = store.select ('wibble', [Term (condition) ]) – zarquon