机器学习:预处理中处理对象数组的问题咨询
处理列中对象数组的解决思路
展开为多行(行转列)
要是需要把数组里的每个元素拆成单独行,同时保留原列的关联信息,用pandas的explode方法就能快速实现:import pandas as pd # 模拟你的数据 data = { "Column A": ["movie1", "movie2"], "Column B": [ [{"iso_639_1": "en", "name": "English"}, {"iso_639_1": "zh", "name": "普通话"}], [{"iso_639_1": "da", "name": "Dansk"}, {"iso_639_1": "en", "name": "English"}, {"iso_639_1": "no", "name": "Norsk"}, {"iso_639_1": "ru", "name": "Русский"}] ] } df = pd.DataFrame(data) # 先把数组拆成多行 df_exploded = df.explode("Column B", ignore_index=True) # 再把字典格式的内容拆成单独列 df_final = pd.concat([df_exploded["Column A"], df_exploded["Column B"].apply(pd.Series)], axis=1)处理后每行对应一个语言条目,电影名和语言信息一一对应,方便后续分析。
提取特定字段生成新列
如果只需要数组里的某类信息(比如所有语言名称、特定语言代码),用列表推导式直接提取就行:# 提取所有语言名称,用逗号拼接成字符串 df["language_names"] = df["Column B"].apply(lambda x: ", ".join([item["name"] for item in x])) # 提取第一个语言的ISO代码 df["first_language_code"] = df["Column B"].apply(lambda x: x[0]["iso_639_1"] if x else None)这种方式能快速生成扁平的字段,适配大多数数据分析工具的需求。
合并为结构化字符串
要是需要保留完整的数组信息,但又不想处理嵌套结构,直接转成JSON字符串存储:import json df["Column B_str"] = df["Column B"].apply(json.dumps)后续需要使用原始数据时,再用
json.loads把字符串转回数组即可,适合需要存档完整信息的场景。过滤数组元素
如果只需要数组中符合特定条件的条目(比如只保留英文),用简单的过滤逻辑就能实现:df["english_only"] = df["Column B"].apply(lambda x: [item for item in x if item["iso_639_1"] == "en"])可以根据业务需求灵活调整过滤条件,筛选出有用的子数组。
内容的提问来源于stack exchange,提问作者Mohammed Atef
相关产品推荐
相关产品推荐

