如何将元素为长度50的np数组的(35,1)DataFrame转为(35,50)?
解决方法
方法1:用apply(pd.Series)展开数组
直接对包含数组的列应用pd.Series,会自动把每个长度为50的数组拆分成50列:
import pandas as pd import numpy as np # 假设原始DataFrame名为df new_df = df.iloc[:, 0].apply(pd.Series)
执行后new_df的形状就是(35,50),每一列对应原数组的一个元素。
方法2:通过np.vstack堆叠数组后转DataFrame
先提取列里的所有数组组成列表,再用np.vstack转换成二维数组,最后转为DataFrame:
# 提取列中的所有数组 arrays = df.iloc[:, 0].to_list() # 堆叠成(35,50)的二维数组 stacked_arr = np.vstack(arrays) # 转成目标DataFrame new_df = pd.DataFrame(stacked_arr)
为什么reshape不适用?
原DataFrame是(35,1)的结构,每个单元格里是独立的长度50的数组,并非整个DataFrame存储着连续的35×50个数值。reshape是对DataFrame的整体维度做调整,但它无法识别嵌套在单元格里的数组结构,所以直接用reshape操作不会生效。
内容的提问来源于stack exchange,提问作者hurricane133
相关产品推荐
相关产品推荐

