python - Pandas 仅将 1 个表导出到 Excel 但打印所有

标签 python excel pandas web-scraping

下面的代码只将页面上的最后一个表格导出到excel,但是当我运行打印功能时,它会打印所有的表格。我的代码是否存在问题导致无法将所有数据导出到 Excel?
我也尝试过导出为 .csv 文件,但没有成功。

import pandas as pd

url = 'https://www.vegasinsider.com/college-football/matchups/'

dfs = pd.read_html(url)
for df in dfs:
    if len(df.columns) > 1: 
        df.to_excel(r'VegasInsiderCFB.xlsx', index = False)
        #print(df)

最佳答案

你的问题是每次df.to_excel被调用,你正在覆盖文件,所以只剩下最后一个 df 。您需要做的是使用编写器并为每个单独的 df 指定工作表名称例如:

url = 'https://www.vegasinsider.com/college-football/matchups/'
writer = pd.ExcelWriter('VegasInsiderCFB.xlsx', engine='xlsxwriter')
dfs = pd.read_html(url)
counter = 0
for df in dfs:
    if len(df.columns) > 4:
        counter += 1
        df.to_excel(writer, sheet_name = f"sheet_{counter}", index = False)
writer.save()
您可能需要 pip install xlsxwriter xlwt让它工作。
导出到 csv 将永远无法工作,因为 csv 是单个数据表(就像 excel 中的单个工作表),因此在这种情况下,您需要为每个 df 使用新的 csv。
正如评论中所指出的,可以在不更改 df 的情况下将数据写入单张纸上。 s,但合并它们可能要好得多:
import pandas as pd
import numpy as np
url = 'https://www.vegasinsider.com/college-football/matchups/'
dfs = pd.read_html(url)

dfs = [df for df in dfs if len(df.columns) > 4]
columns = ["gameid","game time", "team"] + list(dfs[0].iloc[1])[1:]
N = len(dfs)
values = np.empty((2*N,len(columns)),dtype=np.object)
for i,df in enumerate(dfs):
    time = df.iloc[0,0].replace(" Game Time","")
    values[2*i:2*i+2,2:] = df.iloc[2:,:]
    values[2*i:2*i+2,:2] = np.array([[i,time],[i,time]])
newdf = pd.DataFrame(values,columns = columns)

newdf.to_excel("output.xlsx",index = False)
我用了numpy.array对象类型,以便能够轻松地将原始数据帧中的子矩阵复制到其预期位置。我还需要创建一个 gameid ,将游戏跨行连接起来。现在重写它应该是微不足道的,因此您可以遍历一个 url 列表并将它们写入单独的工作表。

关于python - Pandas 仅将 1 个表导出到 Excel 但打印所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69636702/

相关文章:

python - 将 Pandas SparseDataframe 转换为 Scipy sparse csc_matrix

python - 是否可以旋转数据框并获得每月聚合?

excel - 将 1.1 舍入到 2 的功能是什么?

c# - 通过 C#.net 获取 Excel 中命名区域的范围

python - 如何通过一次数据帧有效地计算行数

python - 3套以上的比例维恩图

python - 使用 Python 在方法中执行 execfile()

Python - win32com 可见错误不起作用?

python - 使用 statsmodel 计算 Pandas 时间序列中单个比例的 95% 置信区间

python - Pandas 合并导致科学数字