Python中如何将多列表转为单列DataFrame?Selenium爬取数据处理
解决方法
核心需求是按单个用户维度,把所有信息(姓名、所在地、每段工作经历字段、每段教育经历字段)整合成有序条目,最终生成单列DataFrame,以下是具体实现方案:
步骤1:统一整理单用户完整信息
先假设你的爬取数据结构如下(可对应替换成你实际的字段和数据):
# 示例爬取数据 names = ["张三", "李四"] locations = ["北京市", "上海市"] # 工作经历:每个元素对应单个用户的多段经历字典列表 work_experiences = [ [{"公司": "科技公司A", "职位": "后端工程师", "入职时间": "2020-03", "离职时间": "2023-05"}, {"公司": "互联网公司B", "职位": "技术主管", "入职时间": "2023-06", "离职时间": "至今"}], [{"公司": "金融公司C", "职位": "数据分析师", "入职时间": "2021-07", "离职时间": "2024-02"}] ] # 教育经历:每个元素对应单个用户的多段经历字典列表 education_experiences = [ [{"学校": "XX大学", "专业": "计算机科学", "入学时间": "2016-09", "毕业时间": "2020-06"}], [{"学校": "YY大学", "专业": "应用统计", "入学时间": "2017-09", "毕业时间": "2021-06"}, {"学校": "ZZ职业学院", "专业": "数学", "入学时间": "2013-09", "毕业时间": "2017-06"}] ]
编写函数将单个用户的所有信息转成有序条目:
def format_user_info(name, location, works, edus): info = [name, location] # 格式化工作经历并添加 for idx, work in enumerate(works, 1): work_str = f"工作经历{idx}:公司={work['公司']},职位={work['职位']},入职时间={work['入职时间']},离职时间={work['离职时间']}" info.append(work_str) # 格式化教育经历并添加 for idx, edu in enumerate(edus, 1): edu_str = f"教育经历{idx}:学校={edu['学校']},专业={edu['专业']},入学时间={edu['入学时间']},毕业时间={edu['毕业时间']}" info.append(edu_str) return info
步骤2:生成单列DataFrame
import pandas as pd # 收集所有用户的格式化信息 all_user_info = [] for name, loc, work, edu in zip(names, locations, work_experiences, education_experiences): user_info = format_user_info(name, loc, work, edu) all_user_info.append(user_info) # 生成单列DataFrame,列名可自定义 df = pd.DataFrame(all_user_info, columns=["个人信息"])
输出示例
最终的单列DataFrame结构如下:
| 个人信息 |
|---|
| ['张三', '北京市', '工作经历1:公司=科技公司A...', '工作经历2:公司=互联网公司B...', '教育经历1:学校=XX大学...'] |
| ['李四', '上海市', '工作经历1:公司=金融公司C...', '教育经历1:学校=YY大学...', '教育经历2:学校=ZZ职业学院...'] |
常见问题修正
如果你的转换代码不符合预期,大概率是以下原因:
- 未按单个用户维度整合数据,直接拼接整个姓名列表、所在地列表等,导致数据错位
- 未将多段工作/教育经历扁平化为单个条目,保留了字典嵌套结构,导致DataFrame列混乱
- 未保证每个用户的信息顺序统一(姓名→所在地→工作经历→教育经历)
你只需将爬取数据替换成示例结构,调整format_user_info函数中的字段名(匹配你实际的字典字段)即可解决问题。
内容的提问来源于stack exchange,提问作者Jesper Ezra
相关产品推荐
相关产品推荐

