如何按含NaN值的modules列对names列分组生成字典?
解决方法
问题核心是原始表格里modules列的NaN值实际属于上一个非空的模块,只需先填充这些空值,再进行分组即可得到预期结果。
完整修正代码
import requests import pandas as pd from bs4 import BeautifulSoup # 爬取网页表格 url = "https://mordred-descriptor.github.io/documentation/master/descriptors.html" html = requests.get(url).content soup = BeautifulSoup(html, 'html.parser') table = soup.find('table') df = pd.read_html(str(table))[0] # 保留需要的列 processed_df = df.drop(['#', 'constructor', 'dim', 'description'], axis=1) # 填充modules列的NaN值:用前一个非空模块名填充(匹配表格中同一模块下子项的结构) processed_df['modules'] = processed_df['modules'].ffill() # 按模块分组,生成名称列表的字典 module_dict = processed_df.groupby('modules')['names'].apply(list).to_dict() # 示例查看前3组结果 print(list(module_dict.items())[:3])
关键步骤说明
- 填充空值:
ffill()方法会把modules列的NaN替换为上一行的非空模块名,完美适配网页表格“模块名下方行属于该模块”的排版逻辑。 - 分组生成字典:填充完成后,用
groupby按模块分组,把每个模块对应的names收集为列表,最后转成字典即可得到键为模块名、值为对应名称列表的结构。
内容的提问来源于stack exchange,提问作者Unknown Dutchman
相关产品推荐
相关产品推荐

