将数据框转换为元组列表[重复]

Posted

技术标签:

【中文标题】将数据框转换为元组列表[重复]【英文标题】:Convert a dataframe to list of tuples [duplicate] 【发布时间】:2017-12-30 07:32:32 【问题描述】:

我有一个这样的 python pandas 数据框 df:

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

我想把它转移到一个列表中:

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

谢谢。

【问题讨论】:

这能回答你的问题吗? Pandas convert dataframe to array of tuples 【参考方案1】:

如果性能很重要,请使用列表推导:

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

注意:对于 df.values。

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

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

此方法可用于任意数量的列。但是,如果您想选择一组特定的列进行转换,您可以预先选择它们。

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

另一种选择是使用map

list(map(tuple, df.to_numpy()))
# [(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)]

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

【讨论】:

我不知道它有多新,但 Pandas 文档不鼓励使用 .values 以支持 .to_numpy() @AMC to_numpy() 是在 0.24 中引入的,在这个答案写完将近 2 年后。我知道是因为I broke the news。显然,从那时起就没有更新过,但只要一个评论就足够了:-) 我知道是因为我爆料了。 你爆料了,显然我投了赞成票!实际上,仅在几分钟前,我从阅读您的个人资料中注意到您跟踪了一些参考 Pandas 问题等。在这方面继续努力! 但只需一条评论就足够了您指的是否决票吗?我认为我投了反对票,因为现在可以将其作为一个更受欢迎的问题的副本关闭,尽管我不确定答案分数如何影响问题在网站上的位置。 另外,我很惊讶您没有为该问题的最佳答案提交编辑。 @AMC 您认为这些都是微不足道的,因为您精通工具和语言。初学者则不能这样说,他们需要在寻找这些信息时随时可用。我同意存在一个更大的问题,即不断提出重复问题,但这是一个不同的问题。当你第一次开始学习一门语言时,你需要快速弄清楚如何做基本的事情,并且将 SO 帖子作为谷歌搜索的热门搜索比需要花费几分钟时间才能找到的文档页面的效率高 10 倍答案。【参考方案2】:

你也可以像这样得到想要的列表:

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

【讨论】:

@Leonid 是的,那是因为 zip 是懒惰的,在你用尽之前实际上不会返回任何东西。【参考方案3】:

使用zip() 创建元组

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

【讨论】:

以上是关于将数据框转换为元组列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将数据框转换为元组列表字典

将列表转换为元组对[重复]

pyspark - 将收集的列表转换为元组

在Python中将列表转换为元组[重复]

使用python将csv文件转换为元组列表

将 Scala 列表转换为元组?