Python 用列表中的项目填充数据框
我正在为幻想足球建立一个预测模型。我用BeautifulSoup抓取了一个网站,将数据解析成列表,创建了一个数据框,并用适当的列表填充了两列。解析代码如下所示:Python 用列表中的项目填充数据框,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在为幻想足球建立一个预测模型。我用BeautifulSoup抓取了一个网站,将数据解析成列表,创建了一个数据框,并用适当的列表填充了两列。解析代码如下所示: stats = [] team_list = [] vs_list = [] for idx in range(len(parsed_stats)): try: stats.append(float(parsed_stats[idx][0])) except: if len(parsed_
stats = []
team_list = []
vs_list = []
for idx in range(len(parsed_stats)):
try:
stats.append(float(parsed_stats[idx][0]))
except:
if len(parsed_stats[idx]) > 1:
team_list.append(parsed_stats[idx][4])
vs_list.append(parsed_stats[idx+1][0].replace('@', ''))
qb.team, qb.vs = team_list, vs_list
player_id name team vs ffpts patt pcmp pyds ptds pint p2 ratt ryds rtds r2 fum td
0 1 Matt Ryan Atl KC 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1 2 Tony Romo Dal NYG 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 3 Robert Griffin III Griffin, NO 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 4 Drew Brees NO Was 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 5 Mark Sanchez NYJ Buf 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
我有38行需要填充,因此现在我的数据帧头部如下所示:
stats = []
team_list = []
vs_list = []
for idx in range(len(parsed_stats)):
try:
stats.append(float(parsed_stats[idx][0]))
except:
if len(parsed_stats[idx]) > 1:
team_list.append(parsed_stats[idx][4])
vs_list.append(parsed_stats[idx+1][0].replace('@', ''))
qb.team, qb.vs = team_list, vs_list
player_id name team vs ffpts patt pcmp pyds ptds pint p2 ratt ryds rtds r2 fum td
0 1 Matt Ryan Atl KC 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1 2 Tony Romo Dal NYG 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 3 Robert Griffin III Griffin, NO 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 4 Drew Brees NO Was 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 5 Mark Sanchez NYJ Buf 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
零需要用stats列表中的项目中的数据填充。我为索引正确的嵌套循环编写了以下代码:
for idx,row in enumerate(qb.values):
count = 4
while count < 17:
for val in stats:
qb.iloc[idx,count] = val
count +=1
对于idx,枚举中的行(qb.值):
计数=4
当计数小于17时:
对于统计中的val:
qb.iloc[idx,count]=val
计数+=1
循环指向右侧单元格,但用零填充整个数据帧,而不是统计项。已解析的_stats列表和其余代码位于我的git hub上:
有什么想法吗?在创建初始数据帧之前,我将上一列的名称更改为
vs_2
,因为您已经有了一个名为vs
的列。在此之后,以下措施似乎奏效:
remaining_columns = columns[4:]
for num, col in enumerate(remaining_columns, start=2):
print(num, col)
# Flatten the list and assign it to the relevant column
flat_list = [item for sublist in parsed_stats[num:][::19] for item in sublist]
qb[col] = flat_list
qb.iloc[0]
玩家识别码1
我叫马特·瑞安
Atl队
vs KC
ffpts 37.00
通过附件31
合格证23
通行证号码299
通过tds 3
整数0
密码20
冲锋队3号
拉什码25
冲锋队tds 1
拉什2 0
记录0
记录码0
记录tds 0
记录2 0
烟0
vs_2 0
名称:0,数据类型:对象
请仔细检查所有内容的顺序是否正确,数字是否合理,我对美式足球不够熟悉,无法对其进行评估。在创建初始数据框之前,我已将上一列的名称更改为
vs_2
,因为您已经有了一个名为vs
的列。在此之后,以下措施似乎奏效:
remaining_columns = columns[4:]
for num, col in enumerate(remaining_columns, start=2):
print(num, col)
# Flatten the list and assign it to the relevant column
flat_list = [item for sublist in parsed_stats[num:][::19] for item in sublist]
qb[col] = flat_list
qb.iloc[0]
玩家识别码1
我叫马特·瑞安
Atl队
vs KC
ffpts 37.00
通过附件31
合格证23
通行证号码299
通过tds 3
整数0
密码20
冲锋队3号
拉什码25
冲锋队tds 1
拉什2 0
记录0
记录码0
记录tds 0
记录2 0
烟0
vs_2 0
名称:0,数据类型:对象
请仔细检查每件事的顺序是否正确,数字是否合理,我对美式足球不够熟悉,无法对其进行评估。只是给出反馈,我不知道分析的统计数据是什么。我希望你能提供这个,这样我们就可以实验了。我无法解析您的数据帧。。。。这相当于我必须努力帮助你。谢谢你的反馈。我编辑了我的帖子,加入了我的git hub。你可以在那里找到它。再次感谢。只是提供反馈,我不知道什么是
parsed_stats
。我希望你能提供这个,这样我们就可以实验了。我无法解析您的数据帧。。。。这相当于我必须努力帮助你。谢谢你的反馈。我编辑了我的帖子,加入了我的git hub。你可以在那里找到它。再次感谢。