Pandas DataFrame 中展开(拆分)多个列表列的高效方法
在本文中,我们将介绍如何使用 Pandas 的 DataFrame 中的高效方法,将多个列表列展开成新的行。
阅读更多:Pandas 教程
什么是列表列?
列表列是指 Pandas 数据帧中包含几个元素的列。在数据帧中,可以在同一列中包含多个值,并且这些值可以是相同的类型或不同的类型。列表列通常用于记录多个值的相关属性,例如学生成绩、比赛记录等。
示例数据
我们将使用一个示例数据框来演示如何拆分多个列表列:
输出:
从示例数据中,可以看到我们有两个列表列:’student_names’ 和 ‘student_ages’。我们将使用 Pandas 中的方法将这些列表列中的值展开,每个值作为一个新行。
方法1:使用 .explode()
Pandas 从 0.25 版本开始提供 .explode() 方法。该方法将列表或其他嵌套的迭代器类型的列转换为单个行,复制另一个 DataFrame 的任何行索引值。我们可以使用 .explode() 方法单独处理每一列,然后将结果合并到最终的 DataFrame 中。
输出:
从上面的输出可以看到,我们使用 .explode() 方法将列表列的值展开为单独的行,并在展开的过程中复制了原 DataFrame 的任何行索引值。
方法2:使用 numpy 和 pd.DataFrame()
我们可以使用 numpy 的 repeat() 函数扩展列表列中的元素,并使用 pd.DataFrame() 将扩展后的数组转换为新的 DataFrame。这种方法适用于所有嵌套数据结构,不仅适用于列表列。
输出:
从上面的输出中可以看出,我们使用 numpy 中的 repeat() 函数将数据框中的每个行重复,然后使用 concatenate() 函数将重复的行连接起来,并使用 pd.DataFrame() 将它们转换回新的 DataFrame。
方法3:使用 .apply() 和我们还可以使用 .apply() 方法和 lambda 函数来展开多个列表列。在这种方法中,我们可以使用 zip() 函数将两个列表列中的元素组合,并创建一个数据列表。 然后我们可以将这个列表传递给 pd.DataFrame() 函数并将其转换为新的 DataFrame。
输出:
从上面的输出可以看到,使用 .apply() 和 lambda 函数,我们将 student_names 和 student_ages 列合并,并将它们放在一个新的列表中,然后将其展开为新的行。然后,在新的 DataFrame 中,我们将 student_names 和 student_ages 列拆分回两个单独的列。
总结
以上三种方法都可以解决展开 DataFrame 中的多个列表列的问题,不同的方法适用于不同的情况。 .explode() 对于大型数据集来说可能是最快的方法。而另外两种方法则适用于任何嵌套数据结构,速度较慢,但仍具有很高的灵活性。
希望这篇文章能够帮助你更深入地了解 Pandas 中展开列表列的不同方法。