zoukankan      html  css  js  c++  java
  • 第十二节 pandas变量变换

    import pandas as pd
    import numpy as np
    import math
    pd.options.display.max_rows = 10  # 设置显示行数
    
    df1 = pd.read_csv(r'E:anacondatestPythonData高校信息.csv', encoding='gbk', index_col='学校名称')
    
    # 添加一列值为1的列
    df1['cons'] = 1
    
    # 通过原变量列经过四则运算生成新列
    df1['new'] = df1.总分 + df1.名次 + 1
    df1['new1'] = np.sqrt(df1.总分)  # numpy支持serial数据格式运算,math库中的sqrt方法就不行,如果使用math库,要和apply连用才可以
    
    # 基于一个原变量做函数运算
    df1['new3'] = df1.总分.apply(math.sqrt)
    df1['new3'] = df1.总分.apply(np.sqrt)
    
    # 对所有单元格进行相同的函数运算
    df2 = df1[['名次', '总分']].applymap(math.sqrt)  # 返回
    '''
                   名次         总分
    学校名称                        
    北京大学     1.000000  10.000000
    清华大学     1.414214   9.924717
    '''
    
    # 不改变原来的数据框,生成新的数据框
    df3 = df1.assign(new4 = df1.总分.apply(math.sqrt))
    
    # 在指定位置插入变量列,该方法直接改变原来的数据框
    df1.insert(1, 'new5', 'cons')  # 1表示列索引,new5变量列名字,cons新列的值
    
    # 修改/替换变量值,本质是如何指定到单元格的问题,只要能准确找到单元格地址,就能准确替换
    # print(df1.所在城市.isin(['上海']))
    '''
    学校名称
    北京大学      False
    清华大学      False
    '''
    # print(df1.head())
    df1.所在城市[70] = '上海'
    df1['所在城市'][70] = '上海'
    df1.loc[70, '所在城市'] = '上海'
    
    # 对应数值的替换
    df1.所在城市.replace('上海', '魔都', inplace=False)  # 将所在城市的上海全部替换成魔都
    df1.所在城市.replace(['北京', '魔都'], ['帝都', '上海'], inplace=False)
    df1.所在城市.replace({'帝都':'北京', '上海':'魔都'}, inplace=False)
    
    # 指定数值替换
    df1.总分.iloc[0:3] = 10  # 总分列1-3行全部数据替换成10
    df1.iloc[0:3, '总分'] = 10  # 总分列1-3行全部数据替换成10
    df1.loc[df1.名次<10, '总分'] =20  # 用index引出相应的索引
    df1.总分[df1.名次<10] = 25
    df1.loc[df1.query("名次<10 and 类型=='综合'").index, '总分'] = 10  # query语句可以用于index定位,然后实现数值替换,但是无法直接实现数值替换,因为query生成的是数据的copy而不是数据地址的引用
    
    # 哑变量变换
    print(df1.head())
    pd.get_dummies(df2.类型, prefix='pre', prefix_sep='-')  # prefix哑变量列名称前缀,prefix_sep前缀和序号直接的连接字符
    pd.get_dummies(df1, columns=['类型'])  # columns希望转换的原始列名,不指定转换所有符合条件的
    
    # 数值变量分段,bins具体分段设定,right每段是否包括右侧边界,include_lowest第一段是否包括最左侧的值,需要和right参数配合使用
    df1['new6'] = pd.cut(df1.名次, bins=[1, 3, 7], right=True, include_lowest=True)
  • 相关阅读:
    css之布局
    css之浮动
    白扯之聊聊我们的情怀
    Vue之指令
    Vue之vue.js声明式渲染
    AJAX经常遇到的那些问题
    HTTP之cookie技术
    正则表达式资料
    require.js资料
    AMD 和 CMD 的区别
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12563074.html
Copyright © 2011-2022 走看看