将数据帧转换为元组列表

时间:2017-07-24 16:04:32

标签: python pandas list dataframe

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

a  b
1  3
3  6
5  7
6  4
7  8

我想将其转移到列表中:

[(1,3),(3,6),(5,7),(6,4),(7,8)]

感谢。

4 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

另一种选择是使用map

list(map(tuple, df.values))
# [(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]

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

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

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

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

答案 1 :(得分:4)

您还可以获得所需的列表:

zip(list(df['a']), list(df['b']))

答案 2 :(得分:2)

使用zip()创建元组

df = pd.DataFrame({'a':[1,3,5,6,7], 'b':[3,6,7,4,8]})
print(list(zip(df['a'], df['b']))

答案 3 :(得分:0)

您也可以这样做:

[tuple(x) for x in df.values]

[(1, 3), (3, 6), (5, 7), (6, 4), (7, 8)]