【问题标题】:How to create a pandas DataFrame with several numpy 1d arrays?如何创建一个带有多个 numpy 1d 数组的 pandas DataFrame?
【发布时间】:2018-01-06 02:02:33
【问题描述】:

我创建了一些 np.array 来对它们进行一些计算。 (都具有相同的大小 [100,1]) 现在我想创建一个熊猫数据框,每个数组应该是该 DF 的一列。 数组的名称应该是 DataFrame 的标题。

在 Matlab 中我会很容易地这样做:

Table = table(array1, array2, array3, ... );

如何在 Python 中做到这一点?

提前致谢!

【问题讨论】:

  • 抱歉,我看错了你的问题。您需要重塑数组以使用我提供的语法。

标签: python arrays pandas numpy


【解决方案1】:

假设这些是你的数组:

arr1, arr2, arr3 = np.zeros((3, 100, 1))

arr1.shape
Out: (100, 1)

您可以使用hstack 将它们堆叠起来,并将生成的二维数组传递给 DataFrame 构造函数:

df = pd.DataFrame(np.hstack((arr1, arr2, arr3)))

df.head()
Out: 
     0    1    2
0  0.0  0.0  0.0
1  0.0  0.0  0.0
2  0.0  0.0  0.0
3  0.0  0.0  0.0
4  0.0  0.0  0.0

或将列命名为arr1arr2、...:

df = pd.DataFrame(np.hstack((arr1, arr2, arr3)), 
                  columns=['arr{}'.format(i+1) for i in range(3)])

给了

df.head()
Out: 
   arr1  arr2  arr3
0   0.0   0.0   0.0
1   0.0   0.0   0.0
2   0.0   0.0   0.0
3   0.0   0.0   0.0
4   0.0   0.0   0.0

【讨论】:

  • 谢谢,效果很好!标题是否有可能获取数组名称而不是 0,1,2 ?
  • 在 Python 中,对象的名称只是引用。一个对象可能有多个名称。因此,没有简单的方法来获取变量的名称,比如arr1。您可以遍历 globals() 中的名称,但不建议这样做。你的变量名有结构吗?如果是这样,很容易构建名称而不是提取它们。 (如 arr1、arr2、arr3...)
  • 谢谢。不,他们是真实姓名。所以我认为我真的需要在 Dataframe 中重命名它们。
【解决方案2】:

使用numpy.concatenate 解决二维数组和DataFrame 构造函数:

df = pd.DataFrame(np.concatenate([arr1, arr2, arr3], axis=1), columns= ['a','b','c'])

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 2018-06-10
    • 2021-08-15
    • 2013-08-17
    • 2019-07-25
    • 2016-07-14
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多