如何将Pandas DataFrame中元组转为数组或直接生成含数组的DataFrame
问题背景
我有一个Pandas DataFrame,每行的条目是包含20个数值的元组,是通过以下代码生成的:
DataFrame = pd.DataFrame({'windows20_energy_x': array_passed}, dtype=float)
尝试改成下面的写法,想直接存入数组时出现报错:
DataFrame = pd.DataFrame({'windows20_energy_x': [array_passed]}, dtype=float)
错误信息:
AssertionError: Number of Block dimensions (4) must equal number of axes (2)
其中array_passed为:
import numpy as np array_passed = [ np.array([0.403, 0.153, 0.052, 0.299, 0.141, 0.056, 0.041, 0.019, 0.009, 0.067, 0.05 , 0.022, 0.014, 0.054, 0.007, 0.007, 0.002, 0.009, 0.003, 0.005]), np.array([0.277, 0.054, 0.101, 0.378, 0.066, 0.056, 0.047, 0.02 , 0.007, 0.057, 0.036, 0.022, 0.024, 0.045, 0.006, 0.008, 0.007, 0.007, 0.003, 0.002]), np.array([0.859, 1.905, 0.808, 9.338, 9.02 , 15.852, 2.491, 5.449, 4.896, 5.937, 3.969, 3.397, 2.666, 0.429, 0.348, 0.458, 0.527, 0.55 , 0.234, 0.174]), np.array([0.489, 0.105, 0.089, 0.464, 0.145, 0.043, 0.035, 0.008, 0.012, 0.03 , 0.046, 0.019, 0.017, 0.194, 0.005, 0.014, 0.013, 0.009, 0.007, 0.005]) ]
疑问
- 是否可以将DataFrame中的元组转为数组?
- 是否有其他方法直接生成每行包含数组的DataFrame?
解答
问题1:可以将元组转为数组
直接使用apply方法结合np.array,就能把列中的元组转回numpy数组:
import pandas as pd import numpy as np # 假设已生成的DataFrame名为df df['windows20_energy_x'] = df['windows20_energy_x'].apply(np.array)
执行后,用type(df.iloc[0, 0])验证,会返回numpy.ndarray,说明转换成功。
问题2:直接生成每行含数组的DataFrame
你之前的错误是因为把array_passed整个套进了列表,导致Pandas识别出维度不匹配。以下几种方法可以直接生成目标DataFrame:
方法1:直接传入array_passed(需后续转换)
这就是你最开始的写法,Pandas会默认把数组转成元组存储,之后再用问题1的方法转回数组即可:
df = pd.DataFrame({'windows20_energy_x': array_passed}, dtype=float)
方法2:指定Series的dtype为object
先将array_passed转为object类型的Series,再生成DataFrame,这样单元格会直接存储numpy数组,无需后续转换:
s = pd.Series(array_passed, dtype='object') df = pd.DataFrame({'windows20_energy_x': s})
方法3:显式遍历生成列表
通过列表推导式确保每个元素都是数组,再传入DataFrame:
df = pd.DataFrame({'windows20_energy_x': [arr for arr in array_passed]}, dtype='object')
内容的提问来源于stack exchange,提问作者CarstenWE
相关产品推荐
相关产品推荐

