📜  Python| Pandas.melt()(1)

📅  最后修改于: 2023-12-03 15:19:16.412000             🧑  作者: Mango

Pandas.melt()

Pandas是Python中广泛使用的数据分析库,提供了丰富的数据操作函数和工具。其中Pandas.melt()函数是一种数据转换函数,可以将宽格式数据(wide-form data)转换为长格式数据(long-form data)。在这个过程中,数据的行标签和某些列标签会被保留,而其他列标签会被展开成行数据的值。

用法

Pandas.melt()函数的一般用法如下:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数说明:

  • frame: 数据源,必填。可以是Pandas中的DataFrame或Series,也可以是其他类似数据结构。
  • id_vars: 保留的列标签,选填。默认为None。如果指定了该参数,那么相应的列标签会被保留在转换后的数据中,而不会被展开成行数据的值。可以传入单个列标签的字符串、列标签列表或者列标签元组。
  • value_vars: 要展开的列标签,选填。默认为None,表示展开所有未被保留的列标签。可以传入单个列标签的字符串、列标签列表或者列标签元组。
  • var_name: 展开列标签后存放在值列中的列标签,选填。默认为None,表示使用原列标签名作为值列的名称。
  • value_name: 值列的名称,选填。默认为value
  • col_level: 如果数据源是一个多层级索引的DataFrame,则指定需要转换的层级,选填。默认为None

下面是一个简单的例子,以说明Pandas.melt()的用法:

import pandas as pd

# 创建数据源
df = pd.DataFrame({
    'country': ['China', 'Japan', 'India'],
    '2016': [1376048943, 126994511, 1339180127],
    '2017': [1380036000, 126785797, 1352617328],
    '2018': [1386395000, 126529100, 1366417756]
})

# 转换数据
result = pd.melt(df, id_vars=['country'], var_name='year', value_name='population')

# 输出结果
print(result)

输出:

  country  year  population
0   China  2016  1376048943
1   Japan  2016   126994511
2   India  2016  1339180127
3   China  2017  1380036000
4   Japan  2017   126785797
5   India  2017  1352617328
6   China  2018  1386395000
7   Japan  2018   126529100
8   India  2018  1366417756

在这个例子中,我们创建了一个DataFrame,其中每行表示一个国家在某一年的人口数量。这是一个典型的宽格式数据。我们使用Pandas.melt()将其转换为长格式数据,其中每行表示一个国家在某一年的人口数量,共有三个列:国家、年份和人口数量。

我们在调用Pandas.melt()时指定了frame参数为df,即数据源。id_vars参数指定了要保留的列标签为['country'],它们不会被展开成行数据的值。var_name参数指定了展开后的列标签要放在值列中,并命名为'year'value_name参数指定了生成的值列要命名为'population'

这样,在这些参数的配合下,我们成功地将宽格式数据转换为了长格式数据。

总结

Pandas.melt()函数是Pandas中非常实用的数据转换函数,可以将宽格式数据转换为长格式数据。通过使用它,我们可以很方便地进行数据分析和可视化处理。