【问题标题】:Pandas Dataframe overwrites with each loop每个循环都会覆盖 Pandas Dataframe
【发布时间】:2019-06-08 17:35:08
【问题描述】:

我正在尝试在每个循环中附加一个数据框。不幸的是,创建的列表总是被新的输出覆盖......

 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_rows = pd.Series(list_rows)
list_rows.to_frame()

我需要一个数据框,在每次迭代中创建一个带有熊猫的新列...

【问题讨论】:

  • 它被覆盖了,因为你的空列表的变量名 (list_row) 在第一个 for 循环中。 for x in link_href_list: x 的任何迭代都会覆盖 list_rows

标签: pandas loops dataframe beautifulsoup overwrite


【解决方案1】:

看,如果您的列表值在每次迭代中都具有相同的长度,那么它应该不会那么困难。您需要做的就是在创建 Dataframe 时,提供列名,它应该很好

pd.DataFrame(list_rows, columns=('Col1', 'Col2', 'Col3'))

您不需要将每个后续迭代值创建为一个系列,即您不需要此行:

list_rows = pd.Series(list_rows)

我希望这对您有所帮助。 如果以防万一,您的值的数量每次都不同,那么可能必须以不同的方式处理。

【讨论】:

  • 感谢您的回答!是的,不幸的是,列表值在每次迭代时都有不同的长度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2021-04-04
  • 2014-09-02
  • 1970-01-01
相关资源
最近更新 更多