如何在Python中将多列表与含键值的字典合并为单个DataFrame
解决LinkedIn抓取数据合并为DataFrame的问题
你遇到的TypeError是因为pd.concat仅支持合并Series或DataFrame对象,直接传入字典必然报错。结合你存在多组工作/教育经历的情况,分两种常用场景给出解决方案:
场景1:每行对应一个用户,多组经历以列表存储
适合保留用户整体信息的需求,每个用户的多条工作/教育经历以列表形式存入对应列:
import pandas as pd # 替换为你的实际抓取数据 names = ["张三", "李四"] locations = ["北京", "上海"] # 每个元素对应一个用户的工作经历列表 exps = [ [{"job": "软件工程师", "company": "科技公司A", "date": "2020-至今", "job_location": "北京", "description": "负责后端开发"}, {"job": "实习工程师", "company": "创业公司B", "date": "2019-2020", "job_location": "北京", "description": "协助测试"}], [{"job": "UI设计师", "company": "设计公司C", "date": "2018-至今", "job_location": "上海", "description": "负责产品界面设计"}] ] # 每个元素对应一个用户的教育经历列表 eds = [ [{"college": "北京大学", "degree": "本科"}], [{"college": "复旦大学", "degree": "硕士"}, {"college": "上海交通大学", "degree": "博士"}] ] # 构造DataFrame数据源 data = { "姓名": names, "所在地": locations, "工作经历": exps, "教育经历": eds } df = pd.DataFrame(data) # 导出CSV df.to_csv("linkedin_users.csv", index=False, encoding="utf-8-sig")
场景2:每行对应一条经历(工作/教育),重复用户基本信息
适合按经历维度分析的需求,每条经历单独成行,用户基础信息随经历重复:
import pandas as pd # 替换为你的实际抓取数据 names = ["张三", "李四"] locations = ["北京", "上海"] exps = [ [{"job": "软件工程师", "company": "科技公司A", "date": "2020-至今", "job_location": "北京", "description": "负责后端开发"}, {"job": "实习工程师", "company": "创业公司B", "date": "2019-2020", "job_location": "北京", "description": "协助测试"}], [{"job": "UI设计师", "company": "设计公司C", "date": "2018-至今", "job_location": "上海", "description": "负责产品界面设计"}] ] eds = [ [{"college": "北京大学", "degree": "本科"}], [{"college": "复旦大学", "degree": "硕士"}, {"college": "上海交通大学", "degree": "博士"}] ] # 整理工作经历记录 exp_records = [] for name, loc, exp_list in zip(names, locations, exps): for exp in exp_list: exp_records.append({ "姓名": name, "所在地": loc, "职位": exp["job"], "公司": exp["company"], "任职时间": exp["date"], "工作地点": exp["job_location"], "工作描述": exp["description"], "院校": None, "学位": None }) # 整理教育经历记录 ed_records = [] for name, loc, ed_list in zip(names, locations, eds): for ed in ed_list: ed_records.append({ "姓名": name, "所在地": loc, "职位": None, "公司": None, "任职时间": None, "工作地点": None, "工作描述": None, "院校": ed["college"], "学位": ed["degree"] }) # 合并所有记录生成DataFrame all_records = exp_records + ed_records df = pd.DataFrame(all_records) # 导出CSV df.to_csv("linkedin_experiences.csv", index=False, encoding="utf-8-sig")
针对你最初错误的快速修正
如果你的exp和ed是每个键对应所有用户的单条值列表(比如exp = {"job": ["软件工程师", "UI设计师"], ...}),可以直接转成DataFrame后合并:
# 假设profile_intro是包含name和location的DataFrame exp_df = pd.DataFrame(exp) ed_df = pd.DataFrame(ed) df = pd.concat([profile_intro, exp_df, ed_df], axis=1)
注意:这种方法仅适用于每个用户只有一条工作/教育经历的场景,多组经历会因长度不匹配报错,优先选用前两种场景的方案。
内容的提问来源于stack exchange,提问作者Jesper Ezra
相关产品推荐
相关产品推荐

