当我将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()
答案 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()