Python устанавливает столбцы фрейма данных в диапазон ячеек Google Sheet - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над тем, чтобы взять результаты своего регрессионного анализа и перенести их в ячейки в 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)
...