Добавить фреймы данных, созданные в цикле for - PullRequest
1 голос
/ 28 июня 2019

когда я пишу свои циклы данных, сгенерированные для цикла for, в файл excel, в файл excel записывается только последняя строка.Я попытался объединить кадры данных, так как каждая итерация создает новый кадр данных, а затем записывает его в файл Excel.

По сути, я хочу успешно объединить фреймы данных в один фрейм, прежде чем записать их в файл Excel.я не могу написать их по отдельности, используя pd.ExcelWriter, так как у меня может быть 100 имен элементов

def CCC_90(df_1,x):
      for i in x:
            print('------------------------------------------------------------------------------------------------------------------- ')
            feature_num =(df_1.iloc[[i]])
            feature_num_correct = (feature_num + 21)
            print(feature_num_correct)

            writer = pd.ExcelWriter('No3_dVSa.xlsx', engine='xlsxwriter')
            appended_data = []
            for j in feature_num:
                  feature_name = dfFeaturename.iloc[[j]]
                  appended_data.append(feature_name)

            appended_data = pd.concat(appended_data)

            appended_data.to_excel(writer, sheet_name='Sheet1',startrow=1)
            writer.save()

1 Ответ

1 голос
/ 28 июня 2019

Файл Excel перезаписывается каждый раз в итерациях цикла outlook. Это означает, что в таблице сохраняется только последняя итерация.

Чтобы решить эту проблему, создайте модуль записи перед внешним циклом и сохраните конкатенированный кадр данных в электронной таблице вне цикла.

Кроме того, начальная строка установлена ​​на 1, поэтому запись начнется с начала листа. Обновление должно соответствовать количеству строк в добавленном кадре данных.

def CCC_90(df_1,x):
    writer = pd.ExcelWriter('No3_dVSa.xlsx', engine='xlsxwriter')
    startrow = 1

    for i in x:
        # ...
        appended_data.to_excel(writer, sheet_name='Sheet1', startrow=startrow)
        startrow = len(appended_data)
    writer.save()

Также еще одна вещь, в зависимости от того, является ли x списком индексов, вы можете iloc со списком, чтобы получить фрейм данных со строками из списка и реорганизовать циклы.

def CCC_90(df_1,x):
    writer = pd.ExcelWriter('No3_dVSa.xlsx', engine='xlsxwriter')
    # the next line should result in a dataframe with
    # a column containing the feature numbers say fc
    feature_nums = df_1.iloc[x]

    # getting the feature names is more direct
    feature_names = dfFeaturename.iloc[feature_nums.fc.tolist()]
    feature_names.to_excel(writer, sheet_name='Sheet1', startrow=1)
    write.save()
...