Моя текущая рабочая реализация выглядит следующим образом. Проблема здесь в том, что сюда входят даже скрытые строки/столбцы:
Код: Выделить всё
def getSpreadsheetData(name, spreadsheet_id, sheet_id=None):
global values_input, service
creds = ServiceAccountCredentials.from_json_keyfile_name(creds_file_path, SCOPES)
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
data_table = sheet.values().get(spreadsheetId=spreadsheet_id,
range=name).execute()
data_values = data_table.get('values', [])
if not data_values:
print('No data found.')
return -1
else:
df = pd.DataFrame(data_values)
return df
Эта проблема, на мой взгляд, отличается от простой фильтрации электронной таблицы на основе значения столбца, как описано здесь. Я хочу получить только те строки таблицы, которые не скрыты. Вызов API по умолчанию для получения содержимого электронной таблицы (см. мой код выше) извлекает все строки, даже те, которые были скрыты вручную и, следовательно, не видны людям, открывающим таблицу по ссылке.
Изменить 2:
Я обновил сообщение, чтобы было более понятно, что моя текущая рабочая реализация возвращает все скрытые ячейки, а это именно то, чего я не хочу. Мне нужен подход, который может исключить те строки/столбцы, которые были скрыты пользователем вручную, поскольку скрытые ячейки не важны и не имеют значения. Следовательно, они мне не нужны в моем выходном фрейме данных.
Изменить 3:
Я собрал небольшой образец набора данных, представленный ниже. Скопируйте содержимое в Google Sheet. С этими данными я обнаружил, что парсеру не удается отличить, что должно быть заголовком, а что должно быть в первой строке. Обратите внимание, что образец набора данных имеет три видимые строки и одну скрытую строку. Функция необходима для возврата этих трех видимых строк в кадре данных pandas. Вместо этого я получаю только один заголовок и две строки, причем заголовок на самом деле представляет собой комбинацию настоящих имен столбцов и содержимого первой строки.
Набор данных:
Код: Выделить всё
Lesson Date/Time German English Completed
Hallo! Oct 21st, 2021 nicht not
Hallo! Oct 21st, 2021 nicht so gut not so good 10/22
Hallo! Oct 21st, 2021 oder or
Hallo! Oct 21st, 2021 schön nice; beautiful; pretty 10/22
Код:
Код: Выделить всё
def getSpreadsheetData(spreadsheet_id, sheet_id=None):
global values_input, service
creds_file_path = "" # add your service account path here
SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name(creds_file_path, SCOPES)
service = build('sheets', 'v4', credentials=creds)
access_token = creds.get_access_token().access_token
url = 'https://docs.google.com/spreadsheets/d/' + spreadsheet_id + '/gviz/tq?tqx=out:csv&gid=' + sheet_id
res = requests.get(url, headers={'Authorization': 'Bearer ' + access_token})
df = pd.read_csv(io.StringIO(res.text), sep=',')
return df
Код: Выделить всё
Lesson Hallo! Date/Time Oct 21st, 2021 German nicht English not Completed Unnamed: 5
0 Hallo! Oct 21st, 2021 nicht so gut not so good 10/22 NaN
1 Hallo! Oct 21st, 2021 schön nice; beautiful; pretty 10/22 NaN
Подробнее здесь: https://stackoverflow.com/questions/694 ... ing-python