使用Pandas Melt处理爬取数据的DataFrame,如何删除指定列并设置列标题?
问题解决:调整Pandas数据处理逻辑以匹配预期输出
问题根源
你的初始data_coverage_table包含空列表作为首个元素,后续的set_index和melt操作逻辑未对齐预期表格结构,导致输出格式不符合要求。
修正步骤
- 清理原始数据:移除初始空列表,确保所有行都是有效保障项数据
- 简化DataFrame构建:直接用有效数据构建DataFrame,明确设置
Coverage列作为索引,列名对应Limit和Deduct - 转置并调整格式:无需复杂的
melt操作,直接转置DataFrame后,生成符合预期的列名格式
完整修正代码
import pandas as pd from openpyxl import load_workbook # 清理后的原始数据(移除开头空列表) data_coverage_table = [ ['Bodily Injury Liability', '$250,000 Ea Person / $500,000 Ea Accident', '---'], ['Property Damage Liability', '$100,000', '---'], ['Uninsured Motorist Bodily Injury', '$250,000 Ea Person / $500,000 Ea Accident', '---'], ['Identity Fraud Expense Coverage', '---', '---'], ['Glass', '---', '$50'] ] # 爬取逻辑修正(初始化空列表而非带空元素的列表) # data_coverage_table = [] # for row in data_coverage: # cells = row.find_elements(by=By.XPATH, value=".//td") # row_data = [cell.text for index, cell in enumerate(cells) if index != 1] # data_coverage_table.append(row_data) texts = ["Limit", "Deduct"] # 构建规范的DataFrame df = pd.DataFrame(data_coverage_table, columns=['Coverage'] + texts).set_index('Coverage') # 转置并调整列名格式 df_transposed = df.T new_columns = [f"{col}-{idx}" for idx, col in zip(df_transposed.index, df_transposed.columns)] df_transposed.columns = new_columns # 写入Excel文件 with pd.ExcelWriter('AutoPersonal.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: writer.book = load_workbook('AutoPersonal.xlsx') df_transposed.to_excel(writer, sheet_name='test1', index=False)
说明
- 修正爬取逻辑:初始化空列表存储爬取数据,避免引入无效空行
- 转置操作直接得到横向表格结构,通过列表推导式生成
保障项-类型格式的列名,完全匹配预期输出 - 整体逻辑更简洁直观,避免了原代码中不必要的多层索引操作
内容的提问来源于stack exchange,提问作者Georgian Costea
相关产品推荐
相关产品推荐

