Поэтому у меня возникли проблемы с обработкой и обработкой большого количества данных.
Моя таблица 1 состоит из двух миллионов записей, например:
TABLE1
ID; AGE; SEX;
1; 1; F
2; 1; F
3; 1; M
4; 2; F
4; 2; m
и другой таблицы с данными:
TABLE2
TYPE, SEX, AGE_RANGE
1, F, 1-5
1, F, 6-10
1, F, 11-15
2, F, 1-5
1, M, 1-5
2, M, 1-5
Я создаю объединение:
SELECT tbl1.id, tbl1.age, tbl2.sex, table2.type
FROM table1 tbl1, table2 tbl2
WHERE
tbl1.age >= tbl2.min_age AND tbl1.age <= tbl2.max_age AND
tbl1.sex = tbl2.sex
Результатом является действительно большая таблица (SELECT должен возвращать около 40 миллионов строк. Затем я использую метод groupby и filter для дальнейшей фильтрации моих записей. У меня естьпроблема, потому что я получаю MemmoryError при запуске моего кода. Я думал об изменении csv, чтобы лучше разместить pandas dataframe (чтобы избежать использования sql) Мой пример кода ниже:
df_table1 = pd.read_csv(table1)
df_table2 = pd.read_csv(table2)
conn = sqlite3.connect(':memory:')
df_table1.to_sql('table1', conn, index=False)
df_table2.to_sql('table2', conn, index=False)
sql = '''SELECT tbl1.id, tbl1.age, tbl2.sex, table2.type
FROM table1 tbl1, table2 tbl2
WHERE
tbl1.age >= tbl2.min_age AND tbl1.age <= tbl2.max_age AND
tbl1.sex = tbl2.sex'''
df_filtered = pd.read_sql_query(sql, conn)
filter = ['sex', 'age_range', 'type']
grouped_data = df_filtered.groupby(iskanje).apply(select_random_row)
#select_random_row is my custom_made function which returns just select few rows that groupby returns
grouped_data .to_csv("result.csv", sep=';', encoding='utf-8')
Самая большая проблема - мой sql, потому что яОшибка выхода из памяти, но даже без ошибки загрузка занимает слишком много времени. Я думал об изменении моего csv и использовании точного AGE, а не AGE_RANGE .... что позволило бы мне использовать запросы панд вместо sql