循环遍历并将列表添加到新行或新列中的数据框

时间:2019-01-15 08:02:14

标签: python list loops dataframe

我确定这很简单,但是我对Python还是很新的。我在每次循环迭代后如何将列表添加到数据框的列或行时遇到麻烦。 我想通过外部for循环遍历大约一百个URL的列表,并通过内部loop提取数据。每次

现在使用代码,我可以创建一个数据框,将所有列表一起添加到数据框的一列或一行中。但我希望将内部循环的每个迭代分别放在数据帧的新列或行中。

list_rows = [] 
for x in link_href_list: 
    urllib.request.urlopen(x)
    html = urlopen(x)
    bs = BeautifulSoup(html, "lxml")    
    table=bs.find('tbody')
    rows = table.tr.next_siblings

    for row in rows:
        a=row.find('td').get_text().strip()
        list_rows.append(a)
list_rows.to_frame()

不幸的是,内部循环的列表将具有不同的长度! 也许有人有一个简单的解决方案或暗示我可以改变什么?谢谢!

2 个答案:

答案 0 :(得分:1)

我假设您是指在新的“行”中外循环的每次迭代。 结果将创建一个二维数组(列表),对于link_href_list中的每个元素,您将获得一个新的“行”。尽管我不知道to_frame()方法是什么,但我认为它是打印输出。

list_columns = [] 
for x in link_href_list: 
    urllib.request.urlopen(x)
    html = urlopen(x)
    bs = BeautifulSoup(html, "lxml")    
    table=bs.find('tbody')
    rows = table.tr.next_siblings
    list_rows = []

    for row in rows:
        a=row.find('td').get_text().strip()
        list_rows.append(a)
    list_columns.append(list_rows)
list_columns.DataFrame()

编辑:如果to_frame是pandas DataFrame的东西,我不完全确定它将如何处理不同的长度。我将检查几个,但是也有解决方法。 似乎还没有关于如何导入不同长度列表的非常简单的答案,而是找到最长的列表并相应地调整熊猫的导入,并在新的循环中制作相等长度的列表。

答案 1 :(得分:0)

一种方法是在外部创建一个空列表,然后在循环内追加(您尝试过)。您的问题似乎是在创建数据框。我会在上面的答案下发表评论,以供他人参考,但是我不能在此代表处发表评论。

定义列,然后使用from_records

创建数据框
list_columns = []

以上答案创建了一个列表( Traceback (most recent call last): File "<ipython-input-396-dc539f26ae12>", line 1, in <module> list_columns.Dataframe() AttributeError: 'list' object has no attribute 'Dataframe' ),然后尝试将其转换为数据框。这应该抛出以下内容:

serializer_field