如何将熊猫数据框转换为单个列表

时间:2019-08-23 03:22:00

标签: python pandas

假设我有一个数据框:

    col1    col2    col3
0    1       5       2
1    7       13
2    9       1
3            7

如何转换为单个列表,例如:

[1, 7, 9, 5, 13, 1, 7]

我尝试过:

df.values.tolist()

但是,这将返回列表列表,而不是单个列表:

[[1.0, 5.0, 2.0], [7.0, 13.0, nan], [9.0, 1.0, nan], [nan, 7.0, nan]]

请注意,数据框将包含未知数量的列。值的顺序并不重要,只要列表包含数据框中的所有值即可。

我想我可以编写一个函数来解压缩值,但是我想知道是否存在一种简单的内置方法将数据框转换为序列/列表?

3 个答案:

答案 0 :(得分:4)

按照当前的方法,可以先将数组变平,然后再将其转换为列表。如果需要删除nan值,也可以在展平后执行以下操作:

arr = df.to_numpy().flatten()
list(arr[~np.isnan(arr)])

此外,未来版本的熊猫似乎更喜欢to_numpy而不是values


另一种也许更清洁的方法是“堆叠”数据框:

df.stack().tolist()

答案 1 :(得分:1)

您可以使用数据框stack

In [12]: df = pd.DataFrame({"col1":[np.nan,3,4,np.nan], "col2":['test',np.nan,45,3]})

In [13]: df.stack().tolist()
Out[13]: ['test', 3.0, 4.0, 45, 3]

答案 2 :(得分:0)

对于订购列表(根据问题陈述):
仅当您的数据包含整数值时:

首先获取数据框中的所有项目,然后从列表中删除nan

items = [item for sublist in [df[cols].tolist() for cols in df.columns] for item in sublist]
items = [int(x) for x in items if str(x) != 'nan']

对于未排序列表:
仅当您的数据包含整数值时:

items = [int(x) for x in sum(df.values.tolist(),[]) if str(x) != 'nan']