• 4. Pandas行列操作


    4.1 新增列

    4.1.1 assign

    Pandas中的assign()函数不仅可以实现不改变原数据情况下新增列,而且可以同时新增多列,还可以配合链式操作使用一行代码完成多个新增列创建,使得代码非常整洁。

    (1)函数

    1. # 新增列Sex_map,映射male为0,female为1
    2. df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1}))
    3. df.assign(Sex_map=df['Sex'].map({'male':0, 'female':1})

    (2)多列

    新增多列时,按照前后顺序,后面列创建的计算过程中可以使用前面已创建的列。

    1. df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1}),
    2.           Sex_age=lambda x:x.Sex_map*x.Age)

    (3)链式

    1. df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1})).\
    2.    assign(Sex_age=lambda x:x.Sex_map*x.Age)
    3. # 不同写法
    4. (
    5. df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1})).\    assign(Sex_age=lambda x:x.Sex_map*x.Age)
    6. )

    4.2 插入列

    4.2.1 insert

    1. ### 对Sex变量加工一个新的变量,并且插入到Sex变量之后
    2. df.columns.get_loc('Sex')
    3. --------------
    4. 4
    5. df.insert(loc=5,
    6.           columns='Sex_map',
    7.           value=df['Sex'].map({'male':0, 'female':1})

    4.3 移除列

    4.3.1 pop

    pop( )可以移除指定列,但参数只接受一个列名,不能同时移除多列,并且在未找到要移除的列名还会提示报错。

    df.pop('Sex_map')

    4.3.2 difference(更好)

    将不在列表中的列名全部筛选出来,然后再用列名筛选匹配的数据。

    df[df.columns.difference(['Sex', 'Sex_map'])]

    4.4 列转行

    1. dic_0 = {
    2.     '球队':['湖人', '勇士', '凯尔特人'],
    3.     '球员':[['詹姆斯','戴维斯','里弗斯'],
    4.            ['库里','汤普森','格林'],
    5.            ['塔图姆','布朗','霍乐迪']
    6.          ]
    7. }
    8. df = pd.DataFrame(dic_0)

    4.4.1 explode

    (1)重置索引

    df.explode('球员', ignore_index=True)     # ignore_index=True重置索引

    (2)去重

    df.explode('球员').drop_duplicates()

    (3)格式调整

    explode( )的column参数只能处理列表形式的对象,若原数据中没有explode可接受的格式,需要进行转换。

    1. dic_0 = { '球队':['湖人', '勇士', '凯尔特人'],
    2.          '球员':['詹姆斯,戴维斯,里弗斯',
    3.                '库里,汤普森,格林',
    4.                '塔图姆,布朗,霍乐迪']  }
    5. df = pd.DataFrame(dic_0)
    6. df['球员'] = df['球员'].str.split(',')

    4.5 行转列

    行转列是列转行的反向操作,即将多行数据合并后转成一个列表。

    4.5.1 groupby聚合

    (1)apply

    1. df.groupby('球队').apply(lambda df:df['球员'].tolist().\
    2.                        reset_index().rename(columns={0:'球员'})

    (2)agg

    df.groupby(['球队'])['球员'].agg(list).to_frame().reset_index()

  • 相关阅读:
    C语言:关键字---union(声明共用体类型)
    [Python]多任务编程--进程
    HashMap是怎么解决哈希冲突的?
    【shell】循环语句(for、while、until)
    SpringBoot的搭建(两种方式)
    前后端交互—跨域与HTTP
    两台交换机端口不同的强制双工速率配置的端口协商情况
    springboot 配置文件编写 自定义参数 配置提示功能 配置处理器
    一篇让你无论跳槽还是晋升,都甩别人几条街的知识
    面向对象基础
  • 原文地址:https://blog.csdn.net/PyDarren/article/details/134542945