python - 使用 Pandas 将 dfs 列表从 pd.read_html 转换为 dfs

标签 python pandas

有没有办法修改 pd.read_html 使其返回数据帧而不是数据帧列表?

语境:
我正在尝试使用 pandas read_html 从网站导入表格。我知道 pd.read_html 返回一个 dfs 列表而不是单个数据帧。我一直在通过将从 pd.read_html 返回的列表中的第一个(也是唯一的数据帧)分配给一个新变量来规避这一点。但是,我想将来自不同 url 的多个数据帧存储在主字典中(使用下面的代码),并且希望这些值是数据帧元素,而不是列表。

urls_dict = {
    '2017': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2017',
    '2016': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2016',
    '2015': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2015',
    '2014': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2014',
    '2013': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2013',
    '2012': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2012',
    '2011': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2011',
    '2010': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2010',
    '2009': 'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year=2009'        
}

dfs_dict = {}
for key, url in urls_dict.items():
   dfs_dict[key] = pd.read_html(url)

最佳答案

pd.concat 中使用列表推导式连接每年的数据框(使用 .assign(year=year) 将相应年份添加为列)。

请注意 pd.read_html(url)返回数据帧列表。对于给定的 url,列表的长度永远不会超过 1,所以使用 pd.read_html(url)[0]访问实际数据帧,然后 assign年份作为一列。

dfs = pd.concat([pd.read_html(url)[0].assign(year=year) for year, url in urls_dict.items()])

请注意,您可以创建 urls_dict将以下词典理解与 f-strings 一起使用(格式化字符串文字,在 Python 3.6 中引入):
years = range(2009, 2018)
urls_dict = {
    str(year): f'https://postgrad.sgu.edu/ResidencyAppointmentDirectory.aspx?year={year}' 
    for year in years
}

关于python - 使用 Pandas 将 dfs 列表从 pd.read_html 转换为 dfs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515972/

相关文章:

python - 使用 OpenCV 从谷歌街景检测路灯

python - 用for循环遍历二值化图像可能吗?

python - pd.read_html(url) - 尴尬的表格设计

python - 删除重复的分隔符 Pandas

pandas - 如何使用 awswrangler 只读取 S3 中存储的 parquet 文件的前几行 N 行?

python - 以交互模式运行时,python 有哪些不同之处?

python - 在 django 模板中执行 getattr() 样式查找

python - SQLAlchemy 基于相关对象的 ORM 插入

python - 用于分组的窗口函数

python - 如何在 pandas DataFrame 中找到每行的集合差异?