是的,经过多次讨论和类似的问题被多次投票..我仍然无法想出这一个......
说我有这样的数据框:
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
但是在循环中分配变量名是不可行/推荐的......
有什么建议我能得到我需要的东西吗?
答案 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]
如果真的需要A
,B
,C
和D
列表:
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]]