Pandas如何提取DataFrame列中每个嵌套数组的第n个元素
问题原因
你之前的写法不符合Pandas的索引逻辑:
df["column1"]得到的是一个存储数组的Series对象df["column1"][:]返回的是这个Series的完整拷贝,本质还是一维的Series结构- 后续的
[0]是取Series的第0个位置的元素,也就是第一行的完整数组,而不是对每个数组取第0位,自然和你预期的NumPy广播式索引逻辑不同 - 而
df["column1"][1][0]能生效是因为你先取到了Series第1位的单个数组,再对这个数组取[0],符合常规数组索引逻辑
解决方法
以下三种方法都可以实现提取column1列每个嵌套数组的第n个元素:
- 方法1:用Pandas内置可索引对象访问器(最简便)
直接通过str访问器做索引,不需要额外遍历:n = 0 # 替换为你需要的元素位置 res = df["column1"].str[n] - 方法2:转NumPy数组批量处理(性能最优,适合大数据量)
先把整列数组合并为二维NumPy数组,再按维度提取:import numpy as np n = 0 # 合并后得到形状为(行数, 100)的二维数组,再提取第n列 res = np.vstack(df["column1"].to_numpy())[:, n] - 方法3:apply遍历(兼容性最高,适合后续扩展自定义逻辑)
逐行遍历数组提取对应位置元素:n = 0 res = df["column1"].apply(lambda arr: arr[n])
内容的提问来源于stack exchange,提问作者Unutuku
相关产品推荐
相关产品推荐

