如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

我们有时可能需要一个整齐/长形的数据来进行数据分析。因此,在Python的Pandas库中,有一些方法可以将一个宽格式的数据框架重塑为一个长/整洁的数据框架。在这里,我们将讨论使用pandas函数stack()将数据从宽格式转换为长格式。stack()主要是将指定的索引从列到索引的形式进行堆叠。并且它返回一个重塑的DataFrame,甚至是一个具有多级索引的系列,与当前DataFrame相比,有一个或多个新的最内层,这些层是通过对当前数据框架的列进行透视而创建的,并输出一个。

  • 系列:如果列有一个单层
  • DataFrame:如果列有多个级别,那么新的索引级别是(是)从指定的级别中抽取。

语法: DataFrame.stack(level=- 1, dropna=True)

参数 –

  • level : 它从列axis到索引axis进行堆叠。它接受一个int、string或list作为输入值。默认情况下,它被设置为-1。
  • dropna : 它询问在行没有任何值的情况下,是否将其丢入结果的数据框架或系列中。它是bool类型的,默认设置为True。

返回一个堆叠的数据框架或系列。

现在,让我们开始编码吧!

Case 1#:

首先,让我们从一个简单的单级列和一个广泛的数据形式开始。

import pandas as pd
  
# Single level columns
df_single_level_cols = pd.DataFrame([[74, 80], [72, 85]],
                                    index=['Deepa', 'Balram'],
                                    columns=['Maths', 'Computer'])
print(df_single_level_cols)
Python

输出

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

现在,在我们应用stack()函数之后,我们将得到一个带有单级列axis的数据框架,返回一个系列。

# Single level with stack()
df_single_level_cols.stack()
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

Case 2#:

现在让我们试试多层次的列。

# Simple Multi-level columns
multicol1 = pd.MultiIndex.from_tuples([('Science', 'Physics'),
                                       ('Science', 'Chemistry')])
  
df_multi_level_cols1 = pd.DataFrame([[80, 64], [76, 70]],
                                    index=['Deepa', 'Balram'],
                                    columns=multicol1)
  
print(df_multi_level_cols1)
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

在用多级列axis堆叠数据框架后。

# Multi-level stacking with stack
df_multi_level_cols1.stack()
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

Case 3#:

现在,让我们用一些缺失的值来试试 在普通的宽表格中,我们将得到原样的值,因为它的值比堆叠的表格要少。

# Multi-level with missing values
multicol2 = pd.MultiIndex.from_tuples([('English', 'Literature'),
                                       ('Hindi', 'Language')])
  
df_multi_level_cols2 = pd.DataFrame([[80, 75], [80, 85]],
                                    index=['Deepa', 'Balram'],
                                    columns=multicol2)
df_multi_level_cols2
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

但是,当我们把它叠起来的时候。

当用多级列堆叠数据框架时,我们可能会有缺失值,因为堆叠的数据框架通常比原始数据框架有更多的值。缺失值用NaN填充,比如在这个例子中,英语的值不知道,所以用NaN填充。

# Multi-level missing values as NaN
df_multi_level_cols2.stack()
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

Case 4#:

除此之外,我们还可以根据我们的喜好来包含堆叠的值,因此通过规定堆叠的值来保留。第一个参数实际上是控制哪一层或哪几层被堆叠。比如。

# Prescribing the level(s) to be stacked
df_multi_level_cols2.stack(0)
  
# The first parameter controls which level 
# or levels are stacked
df_multi_level_cols2.stack([0, 1])
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

Case 5#:

现在,最后让我们检查一下 stack() 中 dropna 的目的是什么。为此,我们将删除那些完全为NaN值的行。让我们检查一下包含NaN值时的常规结果的代码。

# Dropping missing values
df_multi_level_cols3 = pd.DataFrame([[None, 80], [77, 82]],
                                    index=['Deepa', 'Balram'],
                                    columns=multicol2)
print(df_multi_level_cols3)
  
# contains the row with all NaN values since,
# dropna=False
df_multi_level_cols3.stack(dropna=False)
print(df_multi_level_cols3)
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

在这里,我们可以看到在Deepa索引中,当我们用dropna = False操作时,Literature的值是NaN(它也包括NaN值)。

让我们检查一下,当我们使dropna = True(省略完整的NaN值行)时。

# Drops the row with completely NaN values
df_multi_level_cols3.stack(dropna=True)
print(df_multi_level_cols3)
Python

输出:

如何用Pandas stack()将宽幅数据框转换为整齐的数据框?

所以,这里让dropna = False将文学行作为一个整体省略,因为它完全是NaN。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册