【问题标题】:Create separately numpy arrays from pandas dataframe columns从 pandas 数据框列分别创建 numpy 数组
【发布时间】:2020-01-17 11:50:25
【问题描述】:

我想在 Python n 中从我的 pandas 数据框列中自动创建 numpy 数组。我可以使用例如手动执行此操作:

numpy_array_1 = data_frame.column_1.values
numpy_array_2 = data_frame.column_2.values
...
numpy_array_n = data_frame.column_n.values

但我不知道应该如何编写代码来自动创建这些数组。

【问题讨论】:

    标签: python arrays pandas numpy dataframe


    【解决方案1】:

    您可以简单地使用for 并循环遍历它。请记住,使用 (list(data_frame)) 返回数据框中的列名列表:

    np_array = []
    for i in list(data_frame):
        np_array.append(data_frame[i].values)
    

    预期的输出是一个包含值子列表的列表。每个子列表与数据框中列的位置匹配。因此,您可以制作字典或从中制作元组。字典示例:

    np_array_dict = {}
    for i in list(data_frame):
        np_array_dict[i] = data_frame[i].values
    

    【讨论】:

    • 感谢您的回答。带有字典的解决方案非常适合我的需求。
    【解决方案2】:

    您可以像 df.values 一样简单地获取所有数据框行和列值的矩阵 你真的需要每列都有不同的数组吗?

    【讨论】:

    • 不,如果我将数组放在一个数组中就足够了,就像@Celius Stingher 的例子一样
    【解决方案3】:

    假设我们有一个简单的df:

    df = pd.DataFrame({"0":[1,2], "1":[3,4]})
    df 
       0  1
    0  1  3
    1  2  4
    

    然后就可以运行了:

    for (key,value) in df.to_dict("list").items():
        exec("numpy_array_{} = np.array({})".format(key, value))
    

    你会得到:

    numpy_array_0
    array([1, 2])
    
    numpy_array_1
    array([3, 4])
    

    等等。

    或者:

    for col in list(df):
        exec("numpy_array_{} = df[str({})].values".format(col,col))
    

    【讨论】:

    • 感谢您的回答。我将在另一个案例中使用这个解决方案。
    【解决方案4】:

    这可以在不使用循环的情况下完成:

    df = pd.DataFrame({"0":[1,2], "1":[3,4], "2":[5,6]})
    print(df)
    
       0  1  2
    0  1  3  5
    1  2  4  6
    

    然后:

    [*np.transpose(df.values)]
    

    结果:

    [array([1, 2]), array([3, 4]), array([5, 6])]
    

    如果需要一本字典,只需按以下步骤进行:

    dict(zip(range(df.shape[1]), [*np.transpose(df.values)]))
    

    给出:

    {0: array([1, 2]), 1: array([3, 4]), 2: array([5, 6])}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2018-11-04
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多