Python XLSX仅写入数组中的最后一个索引
我遇到的问题是,只有player id中的最后一个播放器被写入excel工作表,而我应该得到所有的播放器。我试图改变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
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