Pandas 数据帧到二维 numpy 数组
Pandas dataframe to 2D numpy array
我有以下数据框:
d = {'histogram' : [[1,2],[3,4],[5,6]]}
df = pd.DataFrame(d)
直方图的长度始终相同(在本例中为 2)。
我想将 'histogram' 列转换为 2D numpy 数组以输入神经网络。首选输出是:
output_array = np.array(d["histogram"])
即:
array([[1, 2],
[3, 4],
[5, 6]])
但是当我尝试时:
df["histogram"].to_numpy()
结果是列表数组而不是数组的 numpy 数组:
array([list([1, 2]), list([3, 4]), list([5, 6])], dtype=object)
这对神经网络来说是有问题的,因为我必须指定 dimensions/shape。
我尝试通过转换为 numpy 数组来解决问题:
df["histogram_arrays"] = df["histogram"].apply(lambda x: np.array(x))
df["histogram_arrays"].to_numpy()
其中 returns 是一维数组而不是二维数组。
array([array([1, 2]), array([3, 4]), array([5, 6])], dtype=object)
如何将直方图放入二维数组中?
您的问题本质上是:如何将(相同大小的)列表的 NumPy 数组转换为二维 NumPy 数组。
这使它成为 的(几乎)副本,但由于您的实际问题有些隐藏,我还是会在这里给出答案。
使用numpy.vstack
:
>>> data = df['histogram'].to_numpy()
>>> data
array([list([1, 2]), list([3, 4]), list([5, 6])], dtype=object)
>>> data = np.vstack(data)
>>> data.dtype, data.shape
(dtype('int64'), (3, 2))
>>> data
array([[1, 2],
[3, 4],
[5, 6]])
试试这个:
np.vstack(df['histogram'])
我有以下数据框:
d = {'histogram' : [[1,2],[3,4],[5,6]]}
df = pd.DataFrame(d)
直方图的长度始终相同(在本例中为 2)。
我想将 'histogram' 列转换为 2D numpy 数组以输入神经网络。首选输出是:
output_array = np.array(d["histogram"])
即:
array([[1, 2],
[3, 4],
[5, 6]])
但是当我尝试时:
df["histogram"].to_numpy()
结果是列表数组而不是数组的 numpy 数组:
array([list([1, 2]), list([3, 4]), list([5, 6])], dtype=object)
这对神经网络来说是有问题的,因为我必须指定 dimensions/shape。
我尝试通过转换为 numpy 数组来解决问题:
df["histogram_arrays"] = df["histogram"].apply(lambda x: np.array(x))
df["histogram_arrays"].to_numpy()
其中 returns 是一维数组而不是二维数组。
array([array([1, 2]), array([3, 4]), array([5, 6])], dtype=object)
如何将直方图放入二维数组中?
您的问题本质上是:如何将(相同大小的)列表的 NumPy 数组转换为二维 NumPy 数组。
这使它成为
使用numpy.vstack
:
>>> data = df['histogram'].to_numpy()
>>> data
array([list([1, 2]), list([3, 4]), list([5, 6])], dtype=object)
>>> data = np.vstack(data)
>>> data.dtype, data.shape
(dtype('int64'), (3, 2))
>>> data
array([[1, 2],
[3, 4],
[5, 6]])
试试这个:
np.vstack(df['histogram'])