Pandas 将数据框列展开为多行的方法介绍
在本文中,我们将介绍如何将pandas数据框中的一列数据展开为多行的方法。
阅读更多:Pandas 教程
什么是展开?
展开(expand)或堆叠(stack)是指将数据从列转换为行或从行转换为列的操作。在数据处理中,有时需要将数据进行展开以便更好地进行分析。
方法一:使用explode函数
使用Pandas的explode函数可以将数据框列拆分成多个行。这个函数将一个列表、Series或索引的嵌套序列拆分为多个行,并按照行索引复制其他列,使结果数据框中的每一行都包含一组值。
下面是一个将“Class”列展开为多行的例子:
import pandas as pd
# 创建数据框
df = pd.DataFrame({'Name': ['Alice', 'Bob'],
'Class': [['Math', 'History'],
['Physics', 'Biology']]})
# 使用explode函数将“Class”列展开为多行
df = df.explode('Class')
print(df)
输出结果:
Name Class
0 Alice Math
0 Alice History
1 Bob Physics
1 Bob Biology
方法二:使用pivot函数
pivot函数可以将两列数据转换为新的数据框,其中一列作为行索引,另一列作为列索引,在交叉点处填充数据。使用pivot函数可以把一列拆成多行。
下面是一个将“Class”列展开为多行的例子:
import pandas as pd
# 创建数据框
df = pd.DataFrame({'Name': ['Alice', 'Bob'],
'Class': [['Math', 'History'],
['Physics', 'Biology']]})
# 将“Name”和“Class”列转换为新的数据框
df = df.pivot(index='Name', columns='Class').droplevel(level=0, axis=1)
df = df.reset_index().melt(id_vars='Name', value_name='Class').drop('variable', axis=1)
print(df)
输出结果:
Name Class
0 Alice Math
1 Bob Physics
2 Alice History
3 Bob Biology
方法三:使用concat函数
concat函数可以将多个数据框按照行方向(axis=0)或列方向(axis=1)进行堆叠。使用concat函数可以把多个数据框拆成多行。
下面是一个将“Class”列展开为多行的例子:
import pandas as pd
# 创建数据框
df = pd.DataFrame({'Name': ['Alice', 'Bob'],
'Class': [['Math', 'History'],
['Physics', 'Biology']]})
# 将“Class”列拆成多行
dflist = [pd.DataFrame({'Name': row['Name'], 'Class': c}) for _, row
in df.iterrows() for c in row['Class']]
df = pd.concat(dflist).reset_index(drop=True)
print(df)
输出结果:
Name Class
0 Alice Math
1 Alice History
2 Bob Physics
3 Bob Biology
总结
展开数据框中的列可以方便数据的分析和处理。本文介绍了三种展开数据框列的方法:使用explode函数、使用pivot函数和使用concat函数。这三种方法各有优缺点,需要根据具体的情况进行选择。