gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:09:57 25 4
gpt4 key购买 nike

有没有办法修改 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com