如何从多个数据帧列中创建单独的列表?

时间:2018-03-14 11:10:33

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

是的,经过多次讨论和类似的问题被多次投票..我仍然无法想出这一个......

说我有这样的数据框:

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

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

有什么建议我能得到我需要的东西吗?

3 个答案:

答案 0 :(得分:1)

我认为最好的是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]

答案 1 :(得分:0)

retList = dict()
for i in df.columns:
    iterator = df[i].tolist()
    retList[i] = iterator

您将获得一个字典,其中的键作为列名称和值作为该列中的值列表。

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

retList.values()将为您提供一个大小为4的列表,每个内部列表都是每个列值的列表

答案 2 :(得分:0)

您可以转置数据框并使用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]]