如何使用excel writer在excel文件中写入数据?

如何使用excel writer在excel文件中写入数据?,excel,python-3.x,pandas,writer,Excel,Python 3.x,Pandas,Writer,我有一些代码,它以多个列表的形式通过几个for循环提供输出,我想使用excel writer将输出写入excel或csv文件 from pulp import * from openpyxl import load_workbook import pandas as pd import numbers from pulp import solvers import xlwt P=[4.645885257, 4.481959238, 4.160581972, 2.893299763,

我有一些代码,它以多个列表的形式通过几个for循环提供输出,我想使用excel writer将输出写入excel或csv文件

from pulp import *
from openpyxl import load_workbook
import pandas as pd
import numbers
from pulp import solvers
import xlwt

P=[4.645885257, 4.481959238,    4.160581972,    2.893299763,    2.746552049,    2.762327167,    2.785312466,    2.782704044,\
2.761575576,    2.790301008,    2.826271593,    2.98196142, 3.106517237,    3.049694785,    2.841111886,    2.469119048,\
2.424998603,    2.482937879,    2.541880038,    2.544940077,    2.526766508,    2.539441678,    2.60810043, 2.782490319]
X=[-50, -40, -30, -20, -10, 0, 10, 20, 30, 40]
S=[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150]

x=10
s=16
n=24

F=[[0 for j in range(x)] for i in range(s)]


def xyz():
    Fbar=list()
    Xbar=list() 
    Mega=[22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]
    for k in Mega:
        for f in F:
            try:
                FFF=max([x for x in f if isinstance(x, numbers.Number)])
                XXX=X[f.index(max([x for x in f if isinstance(x, numbers.Number)]))]
                Fbar.append(FFF)
                Xbar.append(XXX)
            except ValueError:
                FFF="NA"
                Fbar.append(FFF)
                Xbar.append(FFF)
        for i in range(s):
            for j in range(x):
                if 150>=(S[i]+X[j])>=S[Xbar.index(max([x for x in Xbar if isinstance(x, numbers.Number)]))]:
                    FFFFF=(S[i]+X[j])/10
                    F[i][j]=-X[j]*P[k]+Fbar[int(FFFFF)]
                if 150<(S[i]+X[j])<S[Xbar.index(max([x for x in Xbar if isinstance(x, numbers.Number)]))]:
                    F[i][j]="NA"


        Xbar=list()
        for f in F:
            try:
                FFF=max([x for x in f if isinstance(x, numbers.Number)])
                XXX=X[f.index(max([x for x in f if isinstance(x, numbers.Number)]))]
                Fbar.append(FFF)
                Xbar.append(XXX)
            except ValueError:
                FFF="NA"
                Fbar.append(FFF)
                Xbar.append(FFF)
        print(Xbar)

        df= pd.DataFrame(Xbar)
        writer= pd.ExcelWriter('C:\Fourth Term @ Dal\Project\Directive studies\output.xlsx', engine='xlsxwriter')
        df.to_excel(writer, sheet_name='Sheet1', startcol=0, startrow=1, header=False, index=True)
        workbook= writer.book
        writer.save() 

xyz()       
这是我在excel(output.xlsx)中得到的结果:


我刚刚从excel文件中复制的打印输出中得到了几个列表中的最后一个列表,但我想要的是将完整的输出(上面代码中的Xbar)复制到excel文件中。提前感谢。:)

我无法在我的计算机上重现相同的输出。但问题不在这里

之所以只有最后一行,是因为您正在
for
循环中写入
csv
文件。因此,您只能获得最后一行,因为每次都会覆盖所有行

在解决方案上(我认为这里最简单),就是将每次迭代的结果保存在一个结果数据框中(这里是
output_df
),然后将这个数据框导出到一个
csv
文件中。 在下面的代码中,我将每个
mega
循环的结果保存为
output\u df
的新列

代码如下:

from pulp import *
from openpyxl import load_workbook
import pandas as pd
import numbers
from pulp import solvers
import xlwt

P = [4.645885257, 4.481959238,    4.160581972,    2.893299763,    2.746552049,    2.762327167,    2.785312466,    2.782704044,
     2.761575576,    2.790301008,    2.826271593,    2.98196142, 3.106517237,    3.049694785,    2.841111886,    2.469119048,
     2.424998603,    2.482937879,    2.541880038,    2.544940077,    2.526766508,    2.539441678,    2.60810043, 2.782490319]
X = [-50, -40, -30, -20, -10, 0, 10, 20, 30, 40]
S = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150]

x = 10
s = 16
n = 24

F = [[0 for j in range(x)] for i in range(s)]


def xyz():
    Fbar = list()
    Xbar = list()
    Mega = [22, 21, 20, 19, 18, 17, 16, 15, 14,
            13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

    df_output = pd.DataFrame()

    for count, k in enumerate(Mega):
        for f in F:
            try:
                FFF = max([x for x in f if isinstance(x, numbers.Number)])
                XXX = X[f.index(
                    max([x for x in f if isinstance(x, numbers.Number)]))]
                Fbar.append(FFF)
                Xbar.append(XXX)
            except ValueError:
                FFF = "NA"
                Fbar.append(FFF)
                Xbar.append(FFF)
        for i in range(s):
            for j in range(x):
                if 150 >= (S[i]+X[j]) >= S[Xbar.index(max([x for x in Xbar if isinstance(x, numbers.Number)]))]:
                    FFFFF = (S[i]+X[j])/10
                    F[i][j] = -X[j]*P[k]+Fbar[int(FFFFF)]
                if 150 < (S[i]+X[j]) < S[Xbar.index(max([x for x in Xbar if isinstance(x, numbers.Number)]))]:
                    F[i][j] = "NA"

        Xbar = list()
        for f in F:
            try:
                FFF = max([x for x in f if isinstance(x, numbers.Number)])
                XXX = X[f.index(
                    max([x for x in f if isinstance(x, numbers.Number)]))]
                Fbar.append(FFF)
                Xbar.append(XXX)
            except ValueError:
                FFF = "NA"
                Fbar.append(FFF)
                Xbar.append(FFF)
        print(Xbar)

        df_output["Mega_{0}".format(k)] = Xbar

    print(df_output)
    writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
    df_output.to_excel(writer, sheet_name='Sheet1', startcol=0, header=True, index=True)
    writer.save()

xyz()
csv
文件:

0   0
1   -10
2   -20
3   -30
4   -40
5   -50
6   -50
7   -50
8   -50
9   -50
10  -50
11  -50
12  -50
13  -50
14  -50
15  -50
from pulp import *
from openpyxl import load_workbook
import pandas as pd
import numbers
from pulp import solvers
import xlwt

P = [4.645885257, 4.481959238,    4.160581972,    2.893299763,    2.746552049,    2.762327167,    2.785312466,    2.782704044,
     2.761575576,    2.790301008,    2.826271593,    2.98196142, 3.106517237,    3.049694785,    2.841111886,    2.469119048,
     2.424998603,    2.482937879,    2.541880038,    2.544940077,    2.526766508,    2.539441678,    2.60810043, 2.782490319]
X = [-50, -40, -30, -20, -10, 0, 10, 20, 30, 40]
S = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150]

x = 10
s = 16
n = 24

F = [[0 for j in range(x)] for i in range(s)]


def xyz():
    Fbar = list()
    Xbar = list()
    Mega = [22, 21, 20, 19, 18, 17, 16, 15, 14,
            13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

    df_output = pd.DataFrame()

    for count, k in enumerate(Mega):
        for f in F:
            try:
                FFF = max([x for x in f if isinstance(x, numbers.Number)])
                XXX = X[f.index(
                    max([x for x in f if isinstance(x, numbers.Number)]))]
                Fbar.append(FFF)
                Xbar.append(XXX)
            except ValueError:
                FFF = "NA"
                Fbar.append(FFF)
                Xbar.append(FFF)
        for i in range(s):
            for j in range(x):
                if 150 >= (S[i]+X[j]) >= S[Xbar.index(max([x for x in Xbar if isinstance(x, numbers.Number)]))]:
                    FFFFF = (S[i]+X[j])/10
                    F[i][j] = -X[j]*P[k]+Fbar[int(FFFFF)]
                if 150 < (S[i]+X[j]) < S[Xbar.index(max([x for x in Xbar if isinstance(x, numbers.Number)]))]:
                    F[i][j] = "NA"

        Xbar = list()
        for f in F:
            try:
                FFF = max([x for x in f if isinstance(x, numbers.Number)])
                XXX = X[f.index(
                    max([x for x in f if isinstance(x, numbers.Number)]))]
                Fbar.append(FFF)
                Xbar.append(XXX)
            except ValueError:
                FFF = "NA"
                Fbar.append(FFF)
                Xbar.append(FFF)
        print(Xbar)

        df_output["Mega_{0}".format(k)] = Xbar

    print(df_output)
    writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
    df_output.to_excel(writer, sheet_name='Sheet1', startcol=0, header=True, index=True)
    writer.save()

xyz()
#     Mega_22  Mega_21  Mega_20  Mega_19  Mega_18  Mega_17  Mega_16  ...  Mega_7  Mega_6  Mega_5  Mega_4  Mega_3  Mega_2  Mega_1
# 0       -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 1       -10      -10      -10      -10      -10      -10      -10  ...     -10     -10     -10     -10     -10     -10     -10
# 2       -20      -20      -20      -20      -20      -20      -20  ...     -20     -20     -20     -20     -20     -20     -20
# 3       -30      -30      -30      -30      -30      -30      -30  ...     -30     -30     -30     -30     -30     -20     -20
# 4       -40      -40      -40      -40      -40      -40      -40  ...     -40     -40     -40     -40     -40     -30     -30
# 5       -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -40     -40
# 6       -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 7       -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 8       -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 9       -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 10      -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 11      -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 12      -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 13      -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 14      -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50
# 15      -50      -50      -50      -50      -50      -50      -50  ...     -50     -50     -50     -50     -50     -50     -50

# [16 rows x 22 columns]