如何用Pandas将BeautifulSoup抓取的HTML标签按首字母分列存入DataFrame
处理HTML标签列表的具体方案
1. 提取标签首字母并生成首字母分列表格
假设你已有的单列DataFrame名为tag_df,列名为tag,按以下步骤处理:
import pandas as pd # 提取每个标签的首字母(统一转为大写,避免大小写差异) tag_df['first_char'] = tag_df['tag'].str[1].str.upper() # 按首字母分组,把同首字母的标签整理成列表 grouped_tags = tag_df.groupby('first_char')['tag'].agg(list).reset_index() # 转换为宽格式表格:每列对应一个首字母,列内是该首字母的所有标签 wide_tag_df = grouped_tags.set_index('first_char').T
如果希望每列的标签按行排列(不足长度用空值填充),可以用这段代码:
# 找到标签数量最多的首字母组的长度 max_tag_num = grouped_tags['tag'].str.len().max() # 把每个首字母的标签列表补全到最长长度,空位置用None填充 grouped_tags['tag'] = grouped_tags['tag'].apply(lambda x: x + [None]*(max_tag_num - len(x))) # 转成每行对应一个标签位置、每列对应一个首字母的表格 wide_tag_df = grouped_tags.set_index('first_char')['tag'].apply(pd.Series).T
2. 首字母标签数量统计与柱状图
用matplotlib实现统计可视化:
import matplotlib.pyplot as plt # 统计每个首字母对应的标签数量,按数量降序排列 tag_count = tag_df.groupby('first_char')['tag'].count().sort_values(ascending=False) # 绘制柱状图 plt.figure(figsize=(12,6)) tag_count.plot(kind='bar', color='#2ca02c') plt.title('HTML标签首字母分布统计') plt.xlabel('首字母') plt.ylabel标签数量') plt.xticks(rotation=45) plt.tight_layout() plt.show()
3. 数据清洗注意事项
- 如果抓取的标签存在大小写混乱(比如
<A>和<a>),先统一格式:tag_df['tag'] = tag_df['tag'].str.lower() - 若标签带属性(比如
<a href="#">),先提取纯标签名:tag_df['tag'] = tag_df['tag'].str.extract(r'<(\w+)>').apply(lambda x: f'<{x[0]}>')
内容的提问来源于stack exchange,提问作者salia_in_red
相关产品推荐
相关产品推荐

