Python 如何将Numpy数组转换为Panda数据帧

Python 如何将Numpy数组转换为Panda数据帧,python,pandas,numpy,type-conversion,numpy-ndarray,Python,Pandas,Numpy,Type Conversion,Numpy Ndarray,我有一个Numpy数组,看起来像这样: [400.31865662] [401.18514808] [404.84015554] [405.14682194] [405.67735105] [273.90969447] [274.0894528] 当我尝试用以下代码将其转换为Panda数据帧时 y = pd.DataFrame(data) print(y) 我在打印时得到以下输出。为什么我会得到那么多zéros 0 0 400.318657

我有一个Numpy数组,看起来像这样:

[400.31865662]
[401.18514808]
[404.84015554]
[405.14682194]
[405.67735105]
[273.90969447]
[274.0894528]
当我尝试用以下代码将其转换为Panda数据帧时

y = pd.DataFrame(data)
print(y)
我在打印时得到以下输出。为什么我会得到那么多zéros

            0
0  400.318657
            0
0  401.185148
            0
0  404.840156
            0
0  405.146822
            0
0  405.677351
            0
0  273.909694
            0
0  274.089453
我想得到一个单列数据框,它看起来像:

400.31865662
401.18514808
404.84015554
405.14682194
405.67735105
273.90969447
274.0894528
您可以使用numpy阵列:

import numpy as np
import pandas as pd

data = [[400.31865662],
        [401.18514808],
        [404.84015554],
        [405.14682194],
        [405.67735105],
        [273.90969447],
        [274.0894528]]

arr = np.array(data)

df = pd.DataFrame(data=arr.flatten())

print(df)
输出

            0
0  400.318657
1  401.185148
2  404.840156
3  405.146822
4  405.677351
5  273.909694
6  274.089453

我刚刚发现了我的错误。(数据)是一个数组列表:

[array([400.0290173]), array([400.02253235]), array([404.00252113]), array([403.99466754]), array([403.98681395]), array([271.97896036]), array([271.97110677])]
所以我使用
np.vstack(data)
来连接它

conc = np.vstack(data)

[[400.0290173 ]
 [400.02253235]
 [404.00252113]
 [403.99466754]
 [403.98681395]
 [271.97896036]
 [271.97110677]]
然后我使用

newdf = pd.DataFrame(conc)


    0
0  400.029017
1  400.022532
2  404.002521
3  403.994668
4  403.986814
5  271.978960
6  271.971107

还有另一种方法,其他答案中没有提到。如果有一个基本上是行向量(或列向量)的NumPy数组,即
(n,)
,则可以执行以下操作:

# sample array
x = np.zeros((20))
# empty dataframe
df = pd.DataFrame()
# add the array to df as a column
df['column_name'] = x

通过这种方式,您可以将多个数组作为单独的列添加。

因为我假设这篇文章的许多访问者不是因为OP的具体和不可复制的问题而来的,这里有一个一般性的答案

df = pd.DataFrame(array)
熊猫的优点是美观(如Excel),因此使用列名很重要

import numpy as np
import pandas as pd

array = np.random.rand(5, 5)
魔法就在这里发生:

df = pd.DataFrame(array, columns=columns, index=index)

你一定在做别的事,因为我得到的正是你所期望的。在创建
数据帧之前,
数据
到底是什么样子的?看起来每个项目都是自己的
DataFrame
我无法重现您的错误,您能发布
打印(数据)
?。数据帧需要有索引(行指示符)和列名(列指示符)。如果您不提供它们,pandas将自动创建它们:您应该看到0,1,2。。调用
print(df)
时,行中为0,列中为0。如果只想查看数据,请使用
y.values
问题在于数组:
array=np.array(np.random.randn(5))
然后使用
pd.DataFrame(array)
。正如人们所期望的那样,你是对的,Andrew(data)的确是一个我没有意识到的数组列表。那么,我如何将它们聚合到一个数组中,以便将其转换为一个数据帧呢?因为(数据)实际上是一个数组列表,所以我尝试了以下代码:
newdf=pd.dataframe(data)newdf.to_csv('test.csv',mode='w',sep=',',header=False,index=False)
我得到的结果只是列表的最后一个数组,即
274.08945279667057
。如何将数组列表连接到同一个文件中?这并不能真正解决这个问题,因为即使不展平数据,
pd.DataFrame(data)
也可以工作。这个问题是另外一个问题,这可能最终解决了OP的问题,也可能没有解决。上面所有的好答案,还有一件事可以做,就是添加一个列名,如果这有帮助的话
df=pd.DataFrame(data=arr.flant(),columns=['Values'])
columns = [f'col_{num}' for num in range(5)]
index = [f'index_{num}' for num in range(5)]
df = pd.DataFrame(array, columns=columns, index=index)
            col_0     col_1     col_2     col_3     col_4
index_0  0.722791  0.177427  0.659204  0.572826  0.476485
index_1  0.770118  0.311444  0.532899  0.415371  0.551828
index_2  0.348923  0.768362  0.858841  0.273221  0.424684
index_3  0.366940  0.600784  0.875214  0.108818  0.397671
index_4  0.451682  0.836315  0.310480  0.727409  0.302597