Pandas 如何将列中的文本拆分为多行

Pandas 如何将列中的文本拆分为多行

在本文中,我们将介绍如何使用Pandas将一列中的文本拆分为多个行。假设我们有一个包含数据的DataFrame对象,其中一列包含逗号分隔的单词列表,我们想要将这些单词拆分为多个行。

阅读更多:Pandas 教程

示例数据

我们使用下面的数据作为示例:

import pandas as pd

data = {'fruit': ['apple, banana', 'orange, mango, pineapple', 'grape, peach, pear']}
df = pd.DataFrame(data)
print(df)

运行上述代码,可以看到DataFrame对象的输出结果:

                      fruit
0            apple, banana
1  orange, mango, pineapple
2        grape, peach, pear

下一步我们将演示如何将这一列拆分为多行。

步骤1:拆分文本并创建新行

我们需要将每个单元格的文本拆分为多个字符串,并在每个字符串上创建新行。我们可以使用apply()方法来遍历DataFrame的每个单元格,并将字符串拆分为列表,并在列表上使用pandas.Series()方法来创建一个新的DataFrame:

new_df = df['fruit'].apply(lambda x: pd.Series(x.split(',')))
print(new_df)

上述代码中,我们使用lambda表达式来对fruit列中每个单元格进行拆分。apply()方法将lambda表达式应用于fruit列中的每个单元格,并将结果存储在new_df中。新的DataFrame将每个单元格中的列表作为一列,并在每个列表中创建新行。

运行上述代码,可以看到新的DataFrame对象的输出结果:

        0        1           2
0   apple   banana         NaN
1  orange    mango  pineapple
2   grape    peach        pear

步骤2:重塑数据

我们需要将数据重塑为每行只包含一个水果的形式。我们可以使用melt()方法来完成这一步:

final_df = new_df.melt(var_name='fruit', value_name='name')
final_df = final_df.dropna()
final_df = final_df.drop(['fruit'], axis=1)
final_df.reset_index(drop=True, inplace=True)
print(final_df)

上述代码中,我们使用melt()方法将新的DataFrame重塑为每行只包含一个水果。其中var_name参数指定原来列表中的列名,value_name参数指定新列的名称。然后删除包含NaN值的行,并使用drop()方法删除不必要的列。最后我们使用reset_index()方法重新排序DataFrame中的索引值。

运行上述代码,可以看到最终的DataFrame对象的输出结果:

          name
0        apple
1       orange
2        grape
3       banana
4        mango
5        peach
6          NaN
7    pineapple
8         pear

总结

在本文中,我们介绍了如何使用Pandas将一列中的文本拆分为多个行。我们首先使用apply()方法将字符串拆分为列表,并在列表上使用pandas.Series()方法创建一个新的DataFrame。然后使用melt()方法重塑数据,将每个列表中的元素放在一个单独的行中。最后通过删除包含NaN值的行和不必要的列,最终得到了我们期望的结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程