• Pandas行列转换


    一、问题描述

    在实际的数据处理过程中,常常会遇到需要将DataFrame中的列转换为行或将行转换为列的情况。但是,如果使用传统的Python方法,这种操作会非常繁琐且容易出错。因此,我们可以使用pandas库提供的优雅方式来完成列转行或行转列的任务。

    二、列转行

    1、函数melt

    melt的主要参数:

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

    下面解释参数的含义:

    • frame:要处理的数据框DataFrame。

    • id_vars:表示不需要被转换的列名

    • value_vars:表示需要转换的列名,如果剩下的列全部都需要进行转换,则不必写

    • var_name和value_name:自定义设置对应的列名,相当于是取新的列名

    • igonore_index:是否忽略原列名,默认是True,就是忽略了原索引名,重新生成0,1,2,3,4…的自然索引

    • col_level:如果列是多层索引列MultiIndex,则使用此参数;这个参数少用

    1. import pandas as pd
    2. # 创建数据集
    3. df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
    4. 'B': {0: 1, 1: 3, 2: 5},
    5. 'C': {0: 2, 1: 4, 2: 6}})
    6. # 将ABC三列转换为行
    7. df_melted = pd.melt(df, id_vars=['A'],
    8. value_vars=['B', 'C'],
    9. var_name='variable',
    10. value_name='value')
    11. print(df_melted)
    12. A variable value
    13. 0 a B 1
    14. 1 b B 3
    15. 2 c B 5
    16. 3 a C 2
    17. 4 b C 4
    18. 5 c C 6

    2、使用stack函数

    使用stack函数可以将列转换为行。首先,我们需要明确将哪些列转换为行。下面的代码演示了如何将A,B,C三个列转换为行。

    该方法利用了set_index和stack函数,其中set_index函数将'A'列作为索引,stack函数将所有的列转换为行,最后用reset_index函数重置索引,并修改列名。

    1. import pandas as pd
    2. # 创建数据集
    3. df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
    4. 'B': {0: 1, 1: 3, 2: 5},
    5. 'C': {0: 2, 1: 4, 2: 6}})
    6. # 将ABC三列转换为行
    7. df_stacked = df.set_index('A').stack().reset_index()
    8. df_stacked.columns = ['A', 'variable', 'value']
    9. print(df_stacked)
    10. A variable value
    11. 0 a B 1
    12. 1 a C 2
    13. 2 b B 3
    14. 3 b C 4
    15. 4 c B 5
    16. 5 c C 6

    3、转置函数

    pandas中的T属性或者transpose函数就是实现行转列的功能,准确地说就是转置。

    4、wide_to_long函数

    pandas 中的 wide_to_long() 函数用于将宽格式的数据转换为长格式。宽格式数据通常是指具有多列的数据集,每一列代表不同的变量或特征。而长格式数据则是将这些变量整理到一列中,同时添加一个标识符列来表示原始变量的名称。

    wide_to_long(df,stubnames,i,j,sep: str = "",suffix: str = "\\d+"
    

    参数说明:

    df:要转换的数据框(DataFrame)。
    stubnames:一个字符串或字符串列表,表示要转换的列名的前缀。通常用于指定要堆叠的相关变量。
    i:标识符列的名称或位置。可以是字符串或整数,用于表示唯一标识每个观察值的行标签。
    j:新生成的列的名称。可以是字符串,用于表示转换后的变量名。
    sep:用于分隔 stubnames 和 j 的连接符,默认为空字符串。
    suffix:用于标识每个变量的正则表达式。默认为 '\d+',表示一个或多个数字。

    5、爆炸函数-explode

    explode 函数是 pandas.DataFrame 类的一个方法,它可以将一个包含 list 或者其他可迭代对象的列(column)拆分成多行,然后在所有其他列(non-explode)上进行复制。

    explode 函数的原型如下:

    DataFrame.explode(
        column,
        ignore_index=False
    ) -> Union['DataFrame', 'Series']

    参数说明:

    column:指定要拆分的列名;
    ignore_index:如果为 True,则重置索引。

    三、行转列

    1、使用pivot函数

    使用pivot函数可以将行转换为列。下面的代码演示了如何将A列作为索引,B列和C列中的值分别作为列,将另一个新列的值填充到每个单元格中。

    该方法中的参数说明如下:

    • index:指定作为行索引的列名。

    • columns:指定需要转换为列的列名。

    • values:指定用于填充新列的列名。

    1. import pandas as pd
    2. # 创建数据集
    3. df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
    4. 'B': {0: 1, 1: 3, 2: 5},
    5. 'C': {0: 2, 1: 4, 2: 6}})
    6. # 将行转换为列
    7. df_pivoted = df.pivot(index='A', columns='B', values='C')
    8. print(df_pivoted)
    9. B 1 3 5
    10. A
    11. a 2.0 NaN NaN
    12. b NaN 4.0 NaN
    13. c NaN NaN 6.0

    2、使用set_index和unstack函数

    使用set_index和unstack函数可以将行转换为列。下面的代码演示了如何将A列作为索引,B列和C列中的值分别作为列,将另一个新列的值填充到每个单元格中。

    该方法中的set_index函数和unstack函数分别用于设置索引和行列转换。

    1. import pandas as pd
    2. # 创建数据集
    3. df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
    4. 'B': {0: 1, 1: 3, 2: 5},
    5. 'C': {0: 2, 1: 4, 2: 6}})
    6. # 将行转换为列
    7. df.set_index(['A', 'B'])['C'].unstack()
    8. print(df)
    9. B 1 3 5
    10. A
    11. a 2.0 NaN NaN
    12. b NaN 4.0 NaN
    13. c NaN NaN 6.0

  • 相关阅读:
    IDEA 宝贝插件
    在vue使用class选择器和下标更改点击列表样式
    【golang】go 返回参数 以及go中 裸返
    CUDA安装
    建议熟知:2023谷歌新搜索规则!
    Leetcode 50.Pow(x,n)
    cube-studio配置镜像仓库并允许
    HTTPS 的加密流程
    苹果ios打包出来的ipa应用APP怎么不能安装?多种安装不上的原因排查
    MySQL之进阶查询语句
  • 原文地址:https://blog.csdn.net/henry_dx/article/details/133349403