在python

时间:2018-01-18 04:15:13

标签: python excel pandas

我试图通过使用我成功做过的熊猫来写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

如果我太久了,我很抱歉。我需要你的帮助 感谢

3 个答案:

答案 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)

<强>结果 enter image description here

答案 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)
  

这里你可以给出行号和列号或者用于循环来写连续数据单元。我用过这个。它的工作对我来说很完美。