python - 使用 For 循环创建一个列表,然后使用 Pandas 导出到 Excel
问题描述
早上好,
我已经为此工作了大约 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)
我意识到这一点很糟糕,但我很感激任何和所有的帮助。
非常感谢。
解决方案
您需要将在循环Var1
的每次迭代中获得的每一个都for link in soup...
放入一个结构(如列表)中,并且只有在循环完成后,您才能将该列表转换为 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 在每次迭代中都会被覆盖。
推荐阅读
- json - Opencart 管理页面 301 永久移动
- python - 如何使用 pandas 将 csv 加载到 MySQL 中?
- javascript - 以固定顺序javascript执行异步函数
- jenkins - 詹金斯暂停队列
- html - 博客网站中的 Facebook 评论插件问题
- c# - 执行存储过程并将结果映射到 DTO 类的通用方法
- xamarin.forms - Xamarin.Forms 绑定只有点作为路径
- php - 如何仅从数据库中获取值?
- javascript - 将二进制文件转换为 blob url
- jenkins - 为什么我的 Jenkins 流水线中出现请求超时?