如何实现pandas DataFrame元组列的向量化快速拆分切片?
可行的向量化实现方案
你之前的写法报错是因为df['A'][:, 0]是MultiIndex的索引语法,无法用来提取列内每个元组的对应位置元素。以下是几种性能远高于apply的实现方式:
方法1:直接转换为DataFrame赋值(最通用,推荐)
直接将元组列转为列表后构造DataFrame,一次性拆分多列,性能最优:
df[['A1', 'A2']] = pd.DataFrame(df['A'].tolist(), index=df.index)
如果元组长度不定,也可以通过这种方式自动生成对应数量的列,只需要修改列名列表即可。
方法2:使用str访问器提取(写法最简洁)
pandas的str访问器支持对任意可迭代元素做位置索引,无需额外转换:
df['A1'] = df['A'].str[0] df['A2'] = df['A'].str[1]
该写法代码量最少,性能比apply高1~2个数量级,适合中小规模数据集。
方法3:基于numpy数组索引(适合超大规模数据集)
如果数据量极大,用numpy做底层转换速度更快:
# 将元组列转为二维numpy数组 tuple_arr = np.array(df['A'].to_list()) # 按列提取赋值 df['A1'] = tuple_arr[:, 0] df['A2'] = tuple_arr[:, 1]
性能参考
百万行规模的数据集下,以上三种方案的执行时间均在秒级以内,远快于逐行apply的数分钟耗时。
内容的提问来源于stack exchange,提问作者Jost A.
相关产品推荐
相关产品推荐

