Я работаю над тем, чтобы взять результаты своего регрессионного анализа и перенести их в ячейки в Google Sheet (используя gspread).Для этого процесса мне нужно запросить диапазон в моем Google Sheet, а затем установить отдельные значения ячеек для строк в каждом столбце во фрейме данных.
Вот код, хранящий диапазон Google Sheet:
worksheet = regression_output_sheet.worksheet("df_full-raw")
# worksheet.range(row_start, column_start, row_end, column_end)
worksheet_range = worksheet.range(1, 1, 500, 3)
print(worksheet_range)
Формат ячейки:
# worksheet_range format
R = Row
C = Column
'' = Value
<Cell R#C# ''>
# worksheet_range array
[<Cell R1C1 ''>, <Cell R2C1 ''>, ..., <Cell R500C3 ''>]
Вот мой фрейм данных:
# df_full data frame
date b_clicks b_cpc
2 2018-01-01 72 2.43
3 2018-01-02 232 2.80
...
325 2018-11-20 162 4.31
[324 rows x 3 columns]
Так как массив worksheet_range разделен запятой и разделен диапазоном строк, а затем диапазоном столбцов, я подумал, что наилучшим подходом для установки значений фрейма данных в значения ячеек является циклический переход по длине выбранных столбцов (например, 3), установкав массив, который затем будет передан в цикл для worksheet.range (1, i, 500, i).Оттуда у меня есть цикл, который проходит по каждому столбцу в фрейме данных и устанавливает значения в список, а затем для каждой строки в worsheet_range значение устанавливается для каждой строки в диапазоне столбцов фрейма данных, а затем вызывается update_cells, но яне думаю, что моя структура цикла правильная, потому что она повторяет циклы R1C1 - R1C500 множество раз и устанавливает значения для каждого столбца в начале этих циклов.
Это желаемый результат рабочего листа_range:
[
<Cell R1C1 '2018-01-01'>, <Cell R2C1 '2018-01-02'>,
..., <Cell R1C2 '72'>, <Cell R2C2 '232'>,
..., <Cell R1C3 '2.43'>, <Cell R2C3 '2.80'>,
..., <Cell R500C3 '4.31'>
]
Полный код:
# store count of column names
gs_columns = []
# count columns
for i in range(0,len(columns)):
gs_columns.append(i+1)
print(gs_columns) # [1,2,3]
# for each column, store a worksheet range
for col_val in gs_columns:
worksheet_range = worksheet.range(1, col_val, 500, col_val)
print(type(worksheet_range))
for col_name in columns:
individual_data_frame = df_full[col_name].values.tolist()
print(individual_data_frame)
# for each row in that range, set the row equal to each value in the dataframe column
for row in range(len(worksheet_range)):
worksheet_range[row].value = individual_data_frame[row]
for arr in worksheet_range:
print(arr)
# update cells
worksheet.update_cells(worksheet_range)