Python 将数据帧列表连接到单个数据帧会产生NaN值
我正在从一个网站上调出一堆表格。我已经能够得到一个数据帧列表,每个数据帧对应于网站上的一个表。但是,当我尝试将它们连接到一个数据帧时,第一个表的值与它们应该的一样,但是除了列索引之外,其他表的值都是NaN。代码为:Python 将数据帧列表连接到单个数据帧会产生NaN值,python,dataframe,concatenation,Python,Dataframe,Concatenation,我正在从一个网站上调出一堆表格。我已经能够得到一个数据帧列表,每个数据帧对应于网站上的一个表。但是,当我尝试将它们连接到一个数据帧时,第一个表的值与它们应该的一样,但是除了列索引之外,其他表的值都是NaN。代码为: import pandas as pd import requests from bs4 import BeautifulSoup from tabulate import tabulate res = requests.get("https://www.atptour.com/e
import pandas as pd
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
res = requests.get("https://www.atptour.com/en/players/rafael-nadal/n409/fedex-atp-win-loss")
soup = BeautifulSoup(res.content,'lxml')
table = soup.find_all(class_="mega-table")
all_data = []
data = pd.read_html(str(table[0]), header =None, index_col= 0)
data = data[0].dropna(axis=0, thresh = 4)
all_data.append(data)
for i in range(1,len(table)):
data = pd.read_html(str(table[i]), header =None, index_col= 0, skiprows= 0)
data = data[0].dropna(axis=0, thresh = 4)
data.columns = [all_data[0].columns]
all_data.append(data)
print(all_data)
df = pd.concat(all_data)
print(df)
:
任何帮助都将不胜感激我将对此稍作编辑,以包括实际的解释,但仍有一些更改需要进行
将熊猫作为pd导入
导入请求
从bs4导入BeautifulSoup
导入pprint
col_name=['年初至今损益表','年初至今联邦快递指数','职业损益表','职业联邦快递指数','头衔']
res=requests.get(“https://www.atptour.com/en/players/rafael-nadal/n409/fedex-atp-win-loss")
汤=BeautifulSoup(res.content,features='lxml')
所有表格=汤。查找所有表格(class='mega-table')
所有_数据=[]
对于所有表格中的当前表格:
curr\u data=pd.read\u html(str(curr\u table),header=None,index\u col=0)[0]
当前数据=当前数据[curr\u data.iloc[:,0]!='-']
curr_data.rename(columns=dict(zip(curr_data.columns,col_name)),inplace=True)
curr_data=curr_data.astype(数据类型={'Titles':'Int64'})
所有数据。追加(当前数据)
res_df=pd.concat(所有数据,排序=False,忽略索引=True)
pprint.pprint(res_df)
最终输出:
YTD W/L YTD Fedex Index Career W/L Career Fedex Index Titles
0 51 - 6 0.895 970 - 196 0.832 84
1 24 - 2 0.923 271 - 38 0.877 19
2 22 - 2 0.917 384 - 79 0.829 35
3 10 - 4 0.714 236 - 150 0.611 NaN
4 7 - 4 0.636 169 - 89 0.655 NaN
5 4 - 1 0.800 84 - 37 0.694 NaN
6 4 - 2 0.667 159 - 73 0.685 NaN
7 1 - 0 1.000 22 - 12 0.647 NaN
8 21 - 3 0.875 436 - 39 0.918 59
9 5 - 1 0.833 71 - 20 0.780 4
10 25 - 2 0.926 461 - 131 0.779 21
11 0 - 0 0.000 2 - 6 0.250 0
12 4 - 0 1.000 82 - 37 0.689 2
13 47 - 6 0.887 888 - 159 0.848 82
14 49 - 1 0.980 858 - 45 0.950 NaN
15 2 - 5 0.286 112 - 151 0.426 NaN
16 46 - 6 0.885 869 - 181 0.828 NaN
17 5 - 0 1.000 101 - 15 0.871 NaN
你期待什么结果?这些数据帧似乎有非常不同的列,我认为将它们连接起来没有多大意义。@AlexanderCécile我希望每个数据帧中的列都位于连接的数据帧中给定的标题下。每个数据帧的单个头是任意的。第一个数据帧的头就是我想要的头。例如,压力点数据框中的第一列将位于YTD W/L之下,依此类推。如果这有道理的话。基本上,获取每个数据帧中的值并将它们放入连接的数据帧中。很抱歉解释得不好,所以每个数据帧都有5列。我认为问题可能在于每个数据帧的标题不同。是的,你说得对。我只是再次检查,数据确实很相似,所以唯一的问题是列名。这太棒了,唯一的问题是我需要行索引是单个数据帧中的索引。不确定这是否是您所指的要进行的更改。再次感谢@SanHaKim是的,这绝对是其中一个变化,不敢相信我错过了,lolHi,我刚刚发现了行名的问题。非常感谢,我真的很感激。有没有办法让我给你投票或什么的?@SanHaKim,真是好笑。你可以接受我的答案,尽管它还真的不完整。有关投票和接受答案的信息,请参阅。