Я работаю над проектом для одного из моих классов Python и пытаюсь собрать среднемесячный снегопад за определенный год.В моем наборе данных, данные, собранные за период с 2016 по 2017 год для многих различных форпостов погоды.
Это просто для очистки некоторых CSV-файлов с погодой с помощью SQLite.Мне удалось получить данные, традиционно в формате CSV, в формат sqlite в памяти, но мой SQL ржавый, и я не могу получить данные для пересылки так, как я хочу.Я просмотрел, попытался разделить данные с помощью WHERE DATE < '20170101'
перед группировкой по дате, но я даже не могу разделить данные с датами (возможно, проблема в том, как SQL выглядит для дат и как мои даты выбиваются,который выглядит как 12/24/2017
).
Вот что я пытаюсь запустить
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("CREATE TABLE t (STATION, NAME, DATE, AWND, SNOW);")
with open('filteredData.csv','r') as fin:
# csv.DictReader uses first line in file for column headings by default
dr = csv.DictReader(fin) # comma is default delimiter
to_db = [(i['STATION'], i['NAME'], i['DATE'], i['AWND'], i['SNOW']) for i in dr]
cur.executemany("INSERT INTO t (STATION, NAME, DATE, AWND, SNOW) VALUES (?, ?, ?, ?, ?)", to_db)
con.commit()
data = cur.execute("SELECT STATION, NAME, DATE, AWND, AVG(SNOW) FROM t GROUP BY STATION")
, и я пытался добавить строку в execute
или executemany
операторы для сортировки всех записей данных и фильтрации до года, например, так:
cur.executemany("INSERT INTO t (STATION, NAME, DATE, AWND, SNOW) VALUES (?, ?, ?, ?, ?) WHERE DATE < '20170101'", to_db)
Я ожидал, что результаты покажут (прямо сейчас) средние снегопады по каждому местоположению за 2016 год (все еще работая над дальнейшим разделением до среднемесячного снегопадакаждое местоположение), но когда я добавляю строку выше, я получаю сообщение об ошибке.Когда я запускаю код без оператора WHERE
, код обрабатывается нормально (и выводит обратно в CSV, как я и хотел), но показывает только средние значения для каждого местоположения, независимо от того, на какой временной шкале были взяты эти средние значения.
Для тех, кому интересно, формат даты в csv, из которого я импортирую, выглядит примерно так: 12/24/2017
EDIT: Я изменил оператор execute
впеременная data
, похожая на
Jan = cur.execute("SELECT STATION, NAME, DATE, AWND, AVG(SNOW) FROM t WHERE (DATE > '2016-01-01' AND DATE < '2016-02-01') GROUP BY STATION")
Ян теперь отражает среднее значение для дат 2016-01-01
до 2016-02-01
, которое, для записи, похоже, на самом деле берет январское среднее количество снегопада и выводит егов CSV.Сейчас я работаю над тем, чтобы заставить февраль печатать после него, не перезаписывая его, из-за чего просто вызывая другой оператор записи с другой переменной, кажется, просто перезаписываем его.