附加在for循环中创建的数据帧

时间:2019-06-28 18:16:14

标签: python pandas dataframe for-loop append

当我将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 个答案:

答案 0 :(得分:1)

每次在Outlook循环迭代中都会覆盖Excel文件。 这意味着只有最后一次迭代被保存在电子表格中。

要解决此问题,请在外部循环之前创建编写器,然后将已合并数据框保存在电子表格中的循环外部。

此外,起始行设置为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 与该列表一起从列表中获取包含行的数据帧,并进行循环重构。 / p>

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()