Aby zarządzać ilością pamięci RAM, którą zużyję podczas analizy, mam duży zbiór danych przechowywany w formacie hdf5 (.h5) i muszę wydajnie wypytywać ten zestaw danych, używając Pand.Jak wysłać zapytanie do sklepu HDF za pomocą Pandy/Python
Zestaw danych zawiera dane o wydajności użytkowników dla zestawu aplikacji. Chcę tylko wyciągnąć kilka pól z 40 możliwych, a następnie przefiltrować wynikową ramkę danych tylko do tych użytkowników, którzy korzystają z jednej z niewielu interesujących mnie aplikacji.
# list of apps I want to analyze
apps = ['a','d','f']
# Users.h5 contains only one field_table called 'df'
store = pd.HDFStore('Users.h5')
# the following query works fine
df = store.select('df',columns=['account','metric1','metric2'],where=['Month==10','IsMessager==1'])
# the following pseudo-query fails
df = store.select('df',columns=['account','metric1','metric2'],where=['Month==10','IsMessager==1', 'app in apps'])
Rozumiem, że ciąg "aplikacja w aplikacjach" nie jest tym, czego chcę. Jest to po prostu podobna do SQL prezentacja tego, co mam nadzieję osiągnąć. Nie mogę przekazać listy strun w jakikolwiek sposób, który próbuję, ale musi być jakiś sposób.
Na razie jestem po prostu uruchamiając zapytanie bez tego parametru, a potem odfiltrować aplikacje nie chcę w kolejnym etapie thusly
df = df[df['app'].isin(apps)]
Ale to jest dużo mniej wydajny, ponieważ wszystkie aplikacje najpierw trzeba je załadować do pamięci, zanim będę mógł je usunąć. W niektórych przypadkach jest to duży problem, ponieważ nie mam wystarczającej ilości pamięci, aby obsłużyć cały niefiltrowany plik df.
Doceniam pomoc. To jest moje pierwsze pytanie dotyczące StackOverflow, więc wszelkie rady są mile widziane.
Dzięki @Jeff. To działało świetnie –