【问题标题】:How to make separate lists out of multiple dataframe columns?如何从多个数据框列中创建单独的列表?
【发布时间】:2018-08-22 21:24:59
【问题描述】:

是的,很多讨论和类似的问题被多次否决..我仍然无法弄清楚这个..

假设我有一个这样的数据框:

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

我想最终得到四个单独的列表(a、b、c 和 d),其中包含来自每一列的数据。

逻辑上(无论如何对我来说)我会这样做:

list_of_lst = df.values.T.astype(str).tolist()

for column in df.columns:
    i = 0
    while i < len(df.columns) - 1:
        column = list_of_lst[1]
        i = i + 1

但是在循环中分配变量名是不可行/不推荐的......

有什么建议可以让我得到我需要的东西吗?

【问题讨论】:

    标签: python python-3.x pandas loops dataframe


    【解决方案1】:
    retList = dict()
    for i in df.columns:
        iterator = df[i].tolist()
        retList[i] = iterator
    

    您会得到一个字典,其中键作为列名,值作为该列中的值列表。

    将其修改为您想要的任何数据结构。

    retList.values() 会给你一个大小为 4 的列表,每个内部列表是每个列值的列表

    【讨论】:

    • 嗯...那么我的四个列表在哪里?我的意思是a,b,c和d?我什么都不需要它们,我已经有了……还是我误解了?
    • retList.values()[0] - retList.values()[3] 是你的 4 个列表
    • 所以要得到我需要做的事情:a = retList.values()[0] b = etc etc??这对我一点帮助都没有,我原来的 df 中有 25 列..
    • 好的,我刚刚建立了您希望列名成为 list_names 的连接。您可以查看@jezrael 答案
    【解决方案2】:

    我认为最好的方法是由DataFrame.to_dict 创建dictionary of list

    np.random.seed(456) 
    
    df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))
    print (df)
       A  B  C  D
    0  5  9  4  5
    1  7  1  8  3
    2  5  2  4  2
    3  2  8  4  8
    4  5  6  0  9
    5  8  2  3  6
    6  7  0  0  3
    7  3  5  6  6
    8  3  8  9  6
    9  5  1  6  1
    
    d = df.to_dict('l')
    print (d['A'])
    [5, 7, 5, 2, 5, 8, 7, 3, 3, 5]
    

    如果真的想要ABCD 列表:

    for k, v in df.to_dict('l').items():
         globals()[k] = v
    
    print (A)
    [5, 7, 5, 2, 5, 8, 7, 3, 3, 5]
    

    【讨论】:

    • 你又来救我了:)非常感谢!
    【解决方案3】:

    您可以转置数据框并使用df.T.values.tolist()。但是,如果您之后要操作数值数组,建议您跳过 tolist() 部分。

    df = pd.DataFrame(np.random.randint(0, 100, size=(5, 4)), columns=list('ABCD'))
    
    #     A   B   C   D
    # 0  17  56  57  31
    # 1   3  44  15   0
    # 2  94  36  87  30
    # 3  44  49  56  76
    # 4  29   5  35  24
    
    list_of_lists = df.T.values.tolist()
    
    # [[17, 3, 94, 44, 29],
    #  [56, 44, 36, 49, 5],
    #  [57, 15, 87, 56, 35],
    #  [31, 0, 30, 76, 24]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2020-10-05
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多