【问题标题】:How to store a dataframe's values in a single list如何将数据框的值存储在单个列表中
【发布时间】:2021-01-29 17:37:36
【问题描述】:

我有以下名为 table 的 pandas 数据框,并希望将其所有单元格值存储在一个列表中:

table = pd.DataFrame({'col-1':[2,7,13,16,23,26,27,29], 'col-2':[541,3,0,15,329,525,6,28], 'col-3':[0,571,0,9,9,0,62,0]}, index=['row-1','row-2','row-3','row-4','row-5','row-6','row-7','row-8'])

最终的输出应该是这样的:

my_list = [2,7,13,16,23,26,27,29,541,3,0,15,329,525,6,28,0,571,0,9,9,0,62,0]

如果您能教我完成这项任务的最有效方法,将不胜感激。干杯。

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    为了更好的性能,使用numpy 方法numpy.ravel 与转置数据:

    import numpy as np
    
    L = np.ravel(table.T).tolist()
    

    DataFrame.unstack 的想法也是可能的,但如果 df 很大,性能应该会更差:

    L = table.unstack().tolist()
    

    print (L)
    [2, 7, 13, 16, 23, 26, 27, 29, 541, 3, 0, 15, 329, 525, 6, 28, 0, 571, 0, 9, 9, 0, 62, 0]
    

    【讨论】:

    • 感谢 jezrael 的出色解决方案。它解决了这个问题。
    • @Farid - 应该只接受一个答案,而不是全部
    【解决方案2】:

    你可以使用:

    my_list = table.T.values.flatten().tolist()
    

    tanspose .T 用于获取与您的示例相同的顺序

    【讨论】:

    • 感谢大卫与我分享这个方法。该问题现已解决。
    【解决方案3】:

    一个可能的解决方案是使用melt():

    my_list = table.melt()['value'].tolist()
    print(my_list)
    

    或者,您也可以尝试使用to_numpy() 更改@DavidK 的答案,这是pandas 的recommended,也在question 中进行了讨论:

    my_list = df.T.to_numpy().ravel().tolist()
    print(my_list)
    
    my_list = df.T.to_numpy().reshape(-1).tolist()
    print(my_list)
    

    两种情况下的输出

    [2, 7, 13, 16, 23, 26, 27, 29, 541, 3, 0, 15, 329, 525, 6, 28, 0, 571, 0, 9, 9, 0, 62, 0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 2018-06-21
      • 2021-07-28
      • 1970-01-01
      • 2020-09-19
      • 2018-09-23
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多