В настоящее время я работаю с набором данных в Google Sheets и в рамках процесса очистки данных использую Python вместе с такими библиотеками, как gspread и pandas, для удаления ненужных столбцов перед обновлением электронной таблицы очищенными данными. Однако после выполнения моего скрипта Python я столкнулся с проблемой: попытка использовать функцию QUERY Google Sheets для извлечения определенных данных на основе столбца с форматированием даты в другой лист не удалась. Похоже, что мой сценарий случайно изменяет формат столбца даты, в результате чего функция QUERY не распознает даты правильно. Это приводит к ошибке: «Запрос завершен с пустым результатом». Эта проблема не возникает, когда я вручную удаляю столбцы; он появляется только после запуска моего сценария, несмотря на то, что для формата столбца установлено значение «Автоматически».
Ниже приведен фрагмент кода, который я использовал:
def load():
auth.authenticate_user()
creds, _ = default()
gc = gspread.authorize(creds)
wb = gc.open_by_key('key')
ws = wb.worksheet("worksheet")
rows = ws.get_all_values()
df = pd.DataFrame.from_records(rows[1:], columns=rows[0])
return df
def update(cols):
base = load()
base.drop(columns=cols, axis=1, inplace=True)
new_bs = [base.columns.tolist()] + base.values.tolist()
auth.authenticate_user()
creds, _ = default()
gc = gspread.authorize(creds)
wb = gc.open_by_key('key')
ws = wb.worksheet("worksheet")
ws.clear()
ws.update('A1', new_bs)
columns_to_remove = ['column1', 'column2', "column3", "column4", "column5"]
update(columns_to_remove)
После анализа я выявил проблему с форматированием даты. После выполнения моего скрипта Python для обновления листа Google Sheets я заметил, что значениям даты предшествует апостроф, форматируя их как текст ('28.02.2019). Это не позволяет Google Sheets распознавать эти записи как даты. Хотя удаление начального апострофа вручную преобразует текст обратно в формат даты, такое ручное вмешательство не очень эффективно.
Исходный столбец даты выглядит следующим образом: 28.02.2019 28.02.2019 28.02.2019 Но после того, как я запускаю код, показанный ранее, чтобы удалить некоторые другие столбцы, рабочий лист обновляется, и столбец даты добавляет апостроф к каждому такая ячейка '28.02.2019. Добавление апострофа заставляет Google Таблицы интерпретировать эти записи как текст, а не как даты. Есть ли способ решить эту проблему @Tanaike
Спасибо за ответ. Хотя я не уверен в вашей реальной таблице, я предложил точку модификации в качестве ответа, угадав вашу ситуацию. Пожалуйста, подтвердите это. Если я неправильно понял вашу ситуацию, прошу прощения.
В вашей ситуации как насчет следующей модификации?
ws.update('A1', new_bs)
ws.update('A1', new_bs, value_input_option=gspread.utils.ValueInputOption.user_entered)
или
ws.update('A1', new_bs, value_input_option = "USER_ENTERED")
вам может потребоваться привести его к допустимому изоформату.