You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问Pandas DataFrame数组类型列的元素并拆分为独立列

解决方法

问题根因

你使用df.column3[1]返回整列的核心原因是链式索引触发了pandas的列优先匹配逻辑,同时数组类型的列默认以object格式存储,直接链式取值容易出现索引错位。

方案1:直接访问column3中的指定元素

用pandas官方推荐的.loc索引取值,避免链式索引的异常:

# 取第1行(索引为0)的column3数组中第1个字典(port_no=1的记录)
df.loc[0, 'column3'][0]
# 取第1行column3数组中第2个字典(port_no=2的记录)
df.loc[0, 'column3'][1]

如果要批量查询所有行指定port_no的status,直接用apply遍历即可:

# 新增列存储port_no=1对应的status
df['port1_status'] = df['column3'].apply(lambda x: [i['status'] for i in x if i['port_no']==1][0])

方案2:将port信息拆分为独立列

用explode+字段拆分的方法,比applymap更适配数组嵌套字典的场景:

import pandas as pd

# 1. 把column3的数组展开,每个字典单独占一行
df_explode = df.explode('column3', ignore_index=False)
# 2. 把字典的key拆为独立字段
df_explode[['port_no', 'status', 'ts']] = df_explode['column3'].apply(pd.Series)
# 3. 按行聚合,把不同port的信息转为独立列
df_result = df_explode.pivot(columns='port_no', values=['status', 'ts', 'column3']).reset_index()
# 重命名列方便查询
df_result.columns = [f'{col[0]}_port{col[1]}' if col[1] else col[0] for col in df_result.columns]

处理后你可以直接通过df_result['status_port1']直接查询port1的status值。

方案3:匹配你给出的预期输出格式

如果只需要把数组的两个元素拆为两个独立列,直接按索引取值即可:

df['column3'] = df['column3'].apply(lambda x: [x[0]])
df['col4'] = df['column3'].apply(lambda x: [x[1]])

运行后得到的DataFrame和你贴的预期输出完全一致。

内容的提问来源于stack exchange,提问作者oneday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:57:02