如何在python中正确地连接使用循环提取的3个数据帧?

2024-09-24 02:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python连接从internet上的3个网页中提取的3个表。这些网页被称为xxxxx1、xxxxx2和xxxxx3。所有3个数据库的形状均为(60,26)。因此,连接所有3个数据库后,形状应为(180,26)。我的问题是它在连接后仍然是(60,26)。可能只显示上一个URL(XXXXX 03)中的表格

for i in range(1,4):

    name_r1 = ('xxxxx'+ i)

    r1 = requests.get(name_r1)

    dfs1 = pd.read_html(r1.content)
    
    df=pd.concat(dfs1)
    

df.shape

这就是我得到的:

enter image description here

提前谢谢


Tags: name数据库url网页dfinternetpd形状
1条回答
网友
1楼 · 发布于 2024-09-24 02:26:06

您可以附加到列表,然后在所有内容之后连接。因为pd.read_html返回一个数据帧列表,我们将使用itertools将它们链接在一起,所以我们连接的是数据帧,而不是数据帧列表

from itertools import chain

l = []
for i in range(1, 4):
    name_r1 = ('xxxxx'+ i)
    r1 = requests.get(name_r1)
    l.append(pd.read_html(r1.content))
    
df = pd.concat(chain.from_iterable(l))

或者用一个简洁的列表来理解:

df = pd.concat(chain.from_iterable([pd.read_html(requests.get('xxxxx'+ i)) 
                                    for i in range(1, 4)]))

上述操作相当于通过连接pd.read_html的输出,然后在循环之后连接所有这些数据帧来创建数据帧

l = []
for i in range(1, 4):
    name_r1 = ('xxxxx'+ i)
    r1 = requests.get(name_r1)
    l.append(pd.concat(pd.read_html(r1.content)))
    
df = pd.concat(l)

相关问题 更多 >