我有一个像这样的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)]
感谢。
答案 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)]