Python XLSX仅写入数组中的最后一个索引

Python XLSX仅写入数组中的最后一个索引,python,xlsxwriter,Python,Xlsxwriter,我遇到的问题是,只有player id中的最后一个播放器被写入excel工作表,而我应该得到所有的播放器。我试图改变xlsx方法,但仍然得到相同的结果。是否有不同的方法来处理此问题或使用不同的库 import requests import json import numpy as np import statistics import pandas as pd import xlsxwriter player_id = ["stephen-curry-1079","rodney-hood

我遇到的问题是,只有player id中的最后一个播放器被写入excel工作表,而我应该得到所有的播放器。我试图改变xlsx方法,但仍然得到相同的结果。是否有不同的方法来处理此问题或使用不同的库

import requests 
import json 
import numpy as np
import statistics
import pandas as pd
import xlsxwriter

player_id = ["stephen-curry-1079","rodney-hood-18629","c-j-mccollum-17121","damian-lillard-13900","enes-kanter-13299",
"andre-iguodala-1334","draymond-green-13976","klay-thompson-13315","andrew-bogut-1494","zach-collins-37866","kevon-looney-18945",
"al-farouq-aminu-1279","evan-turner-1291","seth-curry-16825","shaun-livingston-14007","jonas-jerebko-1106","maurice-harkless-16971",
"jordan-bell-37877","quinn-cook-31771","alfonzo-mckinnie-37808","meyers-leonard-13905","jake-layman-35216"]

for x in player_id:
    url = "https://rotogrinders.com/players/"+x+"?format=json"
    r = requests.get(url)
    cont = r.json()
    player_one_name = cont['player']['name']
    fpts = []
    above_average = []
    games_played = len(cont['stats']['this-season'])
    i = 0
    while i < games_played:
        fpts.append(cont['stats']['this-season'][i]['fpts']['2'])
        i += 1
    fpts = list(map(float,fpts))
    length = len(fpts)
    total = sum(fpts)
    average = total / length 
    player_average = round(average, 2)
    player_variance = round(statistics.variance(fpts), 2)
    player_std = round(statistics.stdev(fpts),2)
    for x in fpts:
        if x >= average:
            above_average.append(x)
    above_average_variance = round(statistics.variance(above_average),2)
    #above_average_average = round(above_average / len(above_average),2)

    player_one = np.random.normal(player_average, player_std, 1000) #avg, std, number of iterations

    data = [player_one_name, player_average, player_variance, player_std, above_average_variance, max_score]
    df = pd.DataFrame([data], columns = ["Name", "Average", "Variance", "STD", "Variance above Avg", "Predicted Score"])
    writer = pd.ExcelWriter('NBAPlayers.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1')
    df.style.set_properties(**{'text-align':'center'})
    pd.set_option('display.max_colwidth',100)
    pd.set_option('display.width', 1000)
    print(df)   
    writer.save()
导入请求
导入json
将numpy作为np导入
进口统计
作为pd进口熊猫
导入xlsxwriter
玩家id=[“stephen-curry-1079”、“rodney-hood-18629”、“c-j-mccollum-17121”、“damian-lillard-13900”、“enes-kanter-13299”,
“andre-Igoudala-1334”、“draymond-green-13976”、“klay-thompson-13315”、“andrew-bogut-1494”、“zach-collins-37866”、“kevon-looney-18945”,
“al-farouq-aminu-1279”、“evan-turner-1291”、“seth-curry-16825”、“shaun-livingston-14007”、“jonas-jerebko-1106”、“maurice-harkless-16971”,
“jordan-bell-37877”、“quinn-cook-31771”、“alfonzo-mckinnie-37808”、“meyers-leonard-13905”、“jake-layman-35216”]
对于玩家id中的x:
url=”https://rotogrinders.com/players/“+x+”?格式=json”
r=请求。获取(url)
cont=r.json()
玩家名称=继续['player']['name']
fpts=[]
高于平均水平=[]
玩的游戏=len(续[统计数据][本赛季])
i=0
当我玩游戏时:
附加(cont['stats']['this-seash'][i]['fpts']['2'])
i+=1
fpts=列表(映射(浮动,fpts))
长度=长度(fpts)
总计=总和(fpts)
平均值=总长度/长度
玩家平均=回合(平均,2)
玩家方差=回合(统计方差(fpts),2)
player_std=round(statistics.stdev(fpts),2)
对于FPT中的x:
如果x>=平均值:
高于平均值。追加(x)
高于平均值的方差=四舍五入(统计学。方差(高于平均值),2)
#高于平均值=四舍五入(高于平均值/长(高于平均值),2)
player_one=np.random.normal(player_average,player_std,1000)#平均值,std,迭代次数
数据=[玩家姓名、玩家平均值、玩家方差、玩家标准值、高于平均值方差、最大得分]
df=pd.DataFrame([data],列=[“名称”、“平均”、“差异”、“标准”、“高于平均值的差异”、“预测分数”])
writer=pd.ExcelWriter('NBAPlayers.xlsx',engine='xlsxwriter')
df.to_excel(书写者,工作表名称='Sheet1')
set_属性(**{'text-align':'center'})
pd.set\u选项('display.max\u colwidth',100)
pd.set_选项('display.width',1000)
打印(df)
writer.save()

数据
df
在每次迭代中都会重新创建,因此在循环完成时,只会保存最后一行

相反,您应该在每次迭代后附加到列表中,然后将数据帧导出到循环的外部:

...
data = []
for x in player_id:
    ...
    data.append([player_one_name, player_average, player_variance, player_std, above_average_variance, max_score])

df = pd.DataFrame(data, columns = ["Name", "Average", "Variance", "STD", "Variance above Avg", "Predicted Score"])
writer = pd.ExcelWriter('NBAPlayers.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
df.style.set_properties(**{'text-align':'center'})
pd.set_option('display.max_colwidth',100)
pd.set_option('display.width', 1000)
print(df)   
writer.save()

@DeepSpace我不明白为什么print(df)会给我想要的结果,但当我试图将其写入excel工作表时,它只会写入最后一行,而不会打印您想要的结果。每次迭代只打印一行数据框。好的,这很有意义。这就是为什么每次迭代的索引都是0