【问题标题】:How to convert numpy one dimensional array to Pandas Series or Dataframe如何将 numpy 一维数组转换为 Pandas Series 或 Dataframe
【发布时间】:2020-11-09 11:51:40
【问题描述】:

我在看似很简单的事情上花了一些时间。我想要的只是将一个 numpy 数组转换为一个系列,然后组合系列来制作一个数据框。我有两个 numpy 数组。

import numpy as np

rooms = 2*np.random.rand(100, 1) + 3
price = 265 + 6*rooms + abs(np.random.randn(100, 1))

我想将房间和价格转换为系列,然后将这两个系列组合成一个数据框来制作 lmplot

那么谁能告诉我该怎么做?谢谢。

【问题讨论】:

    标签: pandas numpy dataframe series lmplot


    【解决方案1】:

    您可以使用ravel() 将数组转换为一维数据:

    pd.DataFrame({
         'rooms': rooms.ravel(),
        'price': price.ravel()
    })
    

    【讨论】:

    • 好的,谢谢,但是否可以将其转换为系列,因为这样做看起来很明显。为什么不可能或不是首选?实际上有点好奇如何将一维数组转换为严重数组。
    • 你也可以pd.Series(rooms.ravel())然后获取dataframe。我想既然你最终想要一个数据框,你可能会通过字典。
    【解决方案2】:

    将数组直接传递给pd.Series 的问题在于维度:roomsprice 是形状为(100,1) 的二维数组,而pd.Series 需要一维数组。要重塑它们,您可以使用不同的方法,其中一种方法是.squeeze(),即:

    import pandas as pd
    import numpy as np
    
    rooms = 2*np.random.rand(100, 1) + 3
    price = 265 + 6*rooms + abs(np.random.randn(100, 1))
    
    rooms_series = pd.Series(rooms.squeeze())
    price_series = pd.Series(price.squeeze())
    

    现在从系列转到数据框,您可以这样做:

    pd.DataFrame({'rooms': rooms_series,
                  'price': price_series})
    

    或者直接来自numpy数组:

    pd.DataFrame({'rooms': rooms.squeeze(),
                  'price': price.squeeze()})
    

    【讨论】:

    • 也谢谢你。是的,这就是我得到的错误,尽管形状显示(行 x 列)并且可能意味着 100 行和 1 列。
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 2021-07-22
    • 2019-08-04
    • 2020-02-10
    • 2016-12-28
    • 1970-01-01
    • 2018-04-19
    • 2020-07-12
    相关资源
    最近更新 更多