将数据帧转换为元组列表

kkj*_*joe 2 python list dataframe pandas

我有一个像这样的python pandas dataframe df:

a  b
1  3
3  6
5  7
6  4
7  8
Run Code Online (Sandbox Code Playgroud)

我想将其转移到列表中:

[(1,3),(3,6),(5,7),(6,4),(7,8)]
Run Code Online (Sandbox Code Playgroud)

谢谢.

cs9*_*s95 8

如果性能很重要,请使用列表理解:

[tuple(r) for r in df.values]
# [(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]
Run Code Online (Sandbox Code Playgroud)

如果迭代列表而不是numpy数组,您可能会发现更好的性能:

[tuple(r) for r in df.values.tolist()]
# [(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]
Run Code Online (Sandbox Code Playgroud)

这个方法可以任意数量的列.但是,如果要选择要转换的特定列集,可以事先选择它们.

[tuple(r) for r in df[['a', 'b']].values]
# [(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用map.

list(map(tuple, df.values))
# [(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]
Run Code Online (Sandbox Code Playgroud)

这与列表理解大致相同,表现明智.你可以用同样的方式概括.


另一种选择是使用apply结果并将其转换为列表:

df.apply(tuple, axis=1).tolist()
# [(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]
Run Code Online (Sandbox Code Playgroud)

这个比较慢,所以不推荐.


dvi*_*ios 5

您还可以像这样获取所需的列表:

zip(list(df['a']), list(df['b']))
Run Code Online (Sandbox Code Playgroud)