pandas基础:数据显示格式转换

2022-11-16 10:34:46 浏览数 (2)

标签:pandas,melt()方法

有时,我们可能需要将pandas数据框架从宽(wide)格式转换为长(long)格式,这可以通过使用melt方法轻松完成。本文通过一个简单的示例演示如何使用melt方法。

图1

考虑以下示例数据集:一个表,其中包含4个国家前6个月的销售数据。然后,我们的目标是将“宽”格式转换为“长”格式,如上图1所示。

import pandas as pd

import numpy as np

np.random.seed(0)

sales = pd.DataFrame({

'country':['Canada','UK','USA','Australia'],

'Jan':np.random.randint(1,100,size=(4)),

'Feb':np.random.randint(1,1000,size=(4)),

'Mar':np.random.randint(1,1000,size=(4)),

'Apr':np.random.randint(1,1000,size=(4)),

'May':np.random.randint(1,1000,size=(4)),

'Jun':np.random.randint(1,1000,size=(4)),

})

print(sales)

图2

melt()方法语法

pd.melt(dataframe, id_vars=None, value_vars=None, var_name=None, value_name=’value’, col_level=None, ignore_index=True)

其中,

  • id_vars:列名的列表/元组。这是为了指定要用作标识符变量的列。
  • value_vars:列名的列表/元组。要取消填充的列,留空意味着使用除id_vars之外的所有列。
  • var_name:字符串。“variable”列的列名。
  • value_name:字符串。”value”列的列名。

将pandas数据框架从宽格式转换为长格式

使用“country”列作为标识符变量id_vars。在第一行代码中,将value_vars留空,实际上是在说:使用除“country”之外的所有列。因此,它相当于下面的第二行代码。

pd.melt(sales, id_vars = 'country')

##下面的代码是等价的

pd.melt(sales, id_vars = 'country', value_vars = ['Jan','Feb','Mar','Apr','May','Jun'])

图3

结果看起来不错。但是,注意到列标题中的一个小问题——“variable”和“value”列的描述性不强。我们想把它们分别改为“Month”和“Sales”。

可以使用df.rename()方法来实现。然而,通过利用melt()方法里的var_name和value_name参数更容易。

pd.melt(sales, id_vars = 'country',var_name='Month',value_name='Sales')

图4

注:本文学习整理自pythoninoffice.com,供有兴趣的朋友学习参考。

0 人点赞