我试图通过使用我成功做过的熊猫来写excel表。 我有问题: 首先我试图按列排序,但我不能。我使用了 df.sort_index,df.sortlevel 两者都没有得到我想要的东西。 这是我的代码:
df = DataFrame({'Seq Label':['if >= 1','if >= 2','if >= 3','if >= 4','if >= 5','if >= 6','if >= 7'],
'TP':[countTP, twocountTP, threecountTP, fourcountTP, fivecountTP, sixcountTP, sevencountTP],
'TN':[countTN, twocountTN, threecountTN, fourcountTN, fivecountTN, sixcountTN, sevencountTN],
'FP':[countFP, twocountFP, threecountFP, fourcountFP, fivecountFP, sixcountFP, sevencountFP],
'FN':[countFN, twocountFN, threecountFN, fourcountFN, fivecountFN, sixcountFN, sevencountFN]})
df.to_excel('Book10.xlsx', sheet_name='sheet1', index=False)
它给了我这个我不想要的输出:
FN FP Seq Label TN TP
0 123 125 if >= 1 20296 7671
1 123 125 if >= 2 17142 6274
2 123 125 if >= 3 3810 1307
3 7 11 if >= 4 419 213
4 1 4 if >= 5 127 74
5 0 0 if >= 6 0 0
6 0 0 if >= 7 0 0
我想把它排序为我在代码中的df中的顺序。我要它 将其排序为:
Seq Label TP TN FP FN
第二个问题 如何在不删除或写入其他数据的情况下在现有Excel工作表上编写。 我试过使用不同的库。比如
import pandas as pd
import openpyxl
import xlrd
如果我太久了,我很抱歉。我需要你的帮助 感谢
答案 0 :(得分:2)
如何根据需要重新排列数据框df
中的列,然后写入excel。这样你就不用担心excel结束了。
注意:列中的值是虚构的。
>>> df = df[['Seq Label', 'TP', 'TN', 'FP', 'FN']]
>>> df
Seq Label TP TN FP FN
0 if >= 1 1 1 1 1
1 if >= 2 2 2 2 2
2 if >= 3 3 3 3 3
3 if >= 4 4 4 4 4
4 if >= 5 5 5 5 5
5 if >= 6 6 6 6 6
6 if >= 7 7 7 7 7
>>> df.to_excel('Book10.xlsx', sheet_name='sheet1', index=False)
答案 1 :(得分:1)
首先对数据帧进行排序,然后将其写入Excel。
df.sort_values(['Seq Label', 'TP', 'TN', 'FP', 'FN']).to_excel(...)
修改的
哦,您只想将列重新排列为所需的顺序。尝试:
df[['Seq Label', 'TP', 'TN', 'FP', 'FN']].to_excel(...)
无法保证字典中的项目顺序。如果您使用字典构建数据框并考虑目标排序,则可以执行以下操作:
desired_order = [['Seq Label', 'TP', 'TN', 'FP', 'FN']]
df_order = [k for k in df if k in desired_order] + [k for k in df if k not in desired_order]
df = df[df_order]
如果数据框中存在键,则会按所需顺序对数据帧进行排序。任何不按所需顺序排列的列都将附加到列的右侧。
答案 2 :(得分:0)
from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils
from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd
from xlwt import easyxf # http://pypi.python.org/pypi/xlwt
rb = open_workbook('file.xlrd',formatting_info=True)
r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file
wb = copy(rb) # a writable copy (I can't read values out of this, only write to it)
w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy
w_sheet.write(row, col, 'Value')
wb.save(file_path)
这里你可以给出行号和列号或者用于循环来写连续数据单元。我用过这个。它的工作对我来说很完美。