如何使用Pandas按数组列对书籍数据分组并生成指定格式的语言-书籍映射字典
如何使用Pandas按数组列对书籍数据分组并生成指定格式的语言-书籍映射字典
嘿,我来帮你搞定这个问题!你要的是把带语言数组列的书籍数据转成指定格式的语言-书籍映射字典,用Pandas可以分几步轻松实现:
第一步:把字符串形式的语言列表转成真实的Python列表
你的CSV里Languages列存的是字符串化的列表(比如"['Portuguese','English']"),首先得把它转成真正的Python列表才能操作。这里用ast.literal_eval比直接用eval更安全,不会执行恶意代码:
import pandas as pd import ast # 读取CSV文件到DataFrame df = pd.read_csv("你的书籍数据.csv") # 转换字符串列表为实际Python列表 df['Languages'] = df['Languages'].apply(ast.literal_eval)
第二步:把语言列表“拆”成单独行(关键一步!)
Pandas的groupby没法直接处理列表类型的列,所以我们需要用explode方法,把每个列表里的语言拆成单独的行,这样每一行就对应一本书名+一种语言:
# 拆分Languages列的列表,生成新的DataFrame exploded_df = df.explode('Languages')
拆分后的数据结构大概是这样的:
| Book Name | Languages |
|---|---|
| Book 1 | Portuguese |
| Book 1 | English |
| Book 2 | English |
| Book 2 | Japanese |
| Book 3 | Spanish |
| Book 3 | Italian |
| Book 3 | English |
第三步:按语言分组并生成初始字典
现在就可以正常用groupby按语言分组,把同一语言对应的书名收集成列表,再转成字典:
# 按语言分组,收集对应的书名列表,转成字典 language_books = exploded_df.groupby('Languages')['Book Name'].agg(list).to_dict()
这时候得到的字典所有值都是列表,比如{'Portuguese': ['Book 1'], ...},还需要最后一步调整格式。
第四步:调整字典格式(单本书名转字符串)
遍历初始字典,把只有一个书名的列表转成单独的字符串,和你想要的格式匹配:
final_dict = {} for lang, books in language_books.items(): if len(books) == 1: final_dict[lang] = books[0] else: final_dict[lang] = books
运行完这步,你就能得到完全符合需求的字典啦!
小提醒
注意你提供的示例数据里,Book3的语言列有个小语法错误:"[Spanish','Italian','English']"少了开头的单引号,实际处理时要确保CSV里的字符串列表格式正确,不然ast.literal_eval会报错哦。
备注:内容来源于stack exchange,提问作者Jorge Luiz Monteiro
相关产品推荐
相关产品推荐

