【问题标题】:Using For Loop to create a List to then export with Pandas to Excel使用 For 循环创建一个列表,然后使用 Pandas 导出到 Excel
【发布时间】:2020-06-01 13:18:26
【问题描述】:

早安,

我已经为此工作了大约 3 天。我需要一些帮助。

我正在使用 BeautifulSoup 来解析它。我所做的一切都一直有效:

df = pd.DataFrame({'Name':[Var1]})
df.append([Var1], ignore_index=False)
df.to_excel(writer, sheet_name='Names', index=False, header=True, startrow=start_row)

我抓取了总共 X 个变量并将它们剥离。可能是 3,也可能是 100。我想做的是抓住它们并将它们写入格式如下的 excel 表中:

名字

变量1

变量1

变量1

变量1

我遇到的问题是它只写最后一个条目,即使我可以使用:

print(df)

并查看 10 个条目。

这就是为什么我认为也许一个列表会更容易。如果我能弄清楚如何遍历 for 循环并创建一个 list=[Var1, Var1, Var1...] 的列表,那么我可以将该列表放入:

df = pd.DataFrame({'Name':[Var1]})

虽然现在看可能行不通。

import requests  
import sys
import re  
import pandas as pd  
from bs4 import BeautifulSoup  

page = requests.get('https://thisisanexampleurl.com')

soup = BeautifulSoup(page.text, 'html.parser')

start_row = 0

writer = pd.ExcelWriter('my_excel_sheet.xlsx', engine='openpyxl')

for link in soup.find_all('h3'):

    Var1 = link.get_text() #grabbing a header string with a Name in it
    Var1 = Var1.strip() #stripping out leading/ending spaces because there's a ton


    df = pd.DataFrame({'Name':[Var1]})
    df.append([Var1], ignore_index=False)
    df.to_excel(writer, sheet_name='Names', index=False, header=True, startrow=start_row)

我意识到我在这方面很糟糕,但我很感激任何和所有的帮助。

非常感谢。

【问题讨论】:

  • 对于每个链接,您将再次定义数据框并附加值。那就是它只显示最后一个附加值?

标签: python python-3.x pandas for-loop


【解决方案1】:

您需要将在 for link in soup... 循环的每次迭代中获得的每个 Var1 放入一个结构(如列表)中,并且只有在循环完成后您才能将该列表转换为一个 DataFrame 并将其写入 Excel。否则,每次调用 df.to_excel 只会一遍又一遍地覆盖同一个 Excel 文件,而您只会看到最后一个已写入的文件。

例如:

vars_list = []
for link in soup.find_all('h3'):
    Var1 = link.get_text() #grabbing a header string with a Name in it
    Var1 = Var1.strip() #stripping out leading/ending spaces because there's a ton
    vars_list.append(Var1)

df = pd.DataFrame({'Name': vars_list})
df.to_excel(writer, sheet_name='Names', index=False, header=True, startrow=start_row)

此外,编写df = pd.DataFrame({'Name':[Var1]}) 只需创建一个数据框,其中包含一列Name 和一行包含Var1。即使您可以初始化一个 DataFrame 并在每次迭代时附加到它,但您在 for 循环中写入 df = pd.DataFrame... 这一事实实际上意味着您的 DataFrame 在每次迭代中都会被覆盖。

【讨论】:

  • 你太棒了。谢谢你的解释。我知道我正在做的事情基本上是在它循环时覆盖它,但我无法弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多