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值的行和不必要的列,最终得到了我们期望的结果。