• pandas-数据处理


    pandas数据处理

    1、删除重复元素

    重复行判断

    df.duplicated() # 重复行 显示为True,其他False (重复行第一次出现不为重复)

    • keep : 默认first 从前往后看, last 从后往前看 (重复出现的行)

    • subset=['B','C','D'] 默认对整行判断, 可指定列索引 # 表示有B, C, D重复的行,显示True

    删除重复行

    df.drop_duplicates() # 删除重复行

    df[df.duplicated()] # 显示重复行数据

    df[np.logical_not(df.duplicated())] 显示不重复的行数据 # 方法1

    df[~df.duplicated()] # 方法2 取反

     

    2. 映射

    映射的含义:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定

    需要使用字典:

    包含三种操作:

    • replace()函数:替换元素

    • 最重要:map()函数:新建一列

    • rename()函数:替换索引

    (1) replace()函数:替换元素

    dic = {10:100,4:104,6:106}

    ddd.replace(dic)   # 将DataFrame中 10,4,6 替换为字典中映射的数据100,104,106

    ddd.replace([10,6], method='ffill', limit=1)   # 指定替换方式

    替换NaN元素

    ddd = ddd.astype(np.float64)
    ddd.iloc[0,1] = np.nan
    ddd.replace({np.nan:0.0})

    (2) map()函数:新建一列

    • 使用map()函数,由已有的列生成一个新列, 适合处理某一单独的列。

    • 仍然是新建一个字典, map()函数中可以使用lambda函数

    传一个映射的字典

    df['python'] = df['语文'].map({72:100,107:110,28:120}) # 由已有的列生成一个新列

    map()函数中可以使用lambda函数

    df['java'] = df['英语'].map(lambda x:x*2)

    传一个自定义函数

    def score(s):
      if s<90:
          return 'failed'
      elif s>120:
          return 'excellent'
      else:
          return 'pass'
    df['English_score'] = df['英语'].map(score)

    可以修改已有数据

    df['数学'] = df['数学'].map({55:100, 66:120, 77:130})

    transform()和map()类似

    df['php'] = df['英语'].transform(lambda x:x*2)

    区别: map() 一次传递一个数据,传完一列; transform 传递整个列

    (3) rename()函数:替换索引

    仅传字典,需指定axis

    df.rename({'张三':'张十三','李四':'李十四','王五':'王老五'},axis=1)

    替换行索引

    df.rename(index = {'张三':'张十三','李四':'李十四','王五':'王老五'})

    替换列索引

    df.rename(columns={'语文':'chese','数学':'math','英语':'English','python':'py'})

     

    3. 异常值检测和过滤

    • 使用describe()函数查看每一列的描述性统计量

      df.describe()

      包括: count: 数据个数 mean: 平均值 std: 标准差

      min: 最小值 max: 最大值 等等

      df.info() 查看DataFrame信息

    • 使用std()函数可以求得DataFrame对象每一列的标准差

    • 根据每一列的标准差,对DataFrame元素进行过滤。

    • 借助any()函数, 测试是否有True,有一个或以上返回True,反之返回False

    • 对每一列应用筛选条件,去除标准差太大的数据

    • 删除特定索引df.drop(labels,inplace = True), 或 df[~cond]

    # 一个形状为10000*3的标准正态分布的DataFrame(np.random.randn),去除掉所有满足以下情况的行:其中任一元素绝对值大于3倍标准差

    df = DataFrame(np.random.randn(10000,3))
    df.abs()  # 每个元素绝对值
    # 判断异常数据.
    # 去除掉所有满足以下情况的行
    # 大于三倍标准偏差
    cond = (df.abs() > df.std()*3).any(axis=1)
    df[cond]   # 存在大于三倍标准偏差元素的异常行
    df[~cond]  # 取反, 去掉异常的行

     

    4. 排序

    • 使用.take()函数排序

      df.take([3,2,1]) # 指定行排序

      df.take([2,1,0],axis=1) # 指定列排序

    • 可以借助np.random.permutation()函数随机排序

      有放回的随机抽样.

      df.take(np.random.randint(0,3,size=3))

      无放回的随机抽样.

      df.take(np.random.permutation([0,1,2]))

     

    5. 数据聚合【重点】

    数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值。

    数据分类处理:

    • 分组:先把数据分为几组

    • 用函数处理:为不同组的数据应用不同的函数以转换数据

    • 合并:把不同组得到的结果合并起来

    数据分类处理的核心: groupby()函数

    1, 分组, groupby

    df.groupby(by='color')

    2, 调用聚合 函数,

    df.groupby(by='color').sum()[['price']] # 会先计算所有列

    df.groupby(by='color')[['price']].sum() # 先取列再聚合. 计算少,性能更佳, 推荐写法.

    3, 把聚合的结果追加到原始数据表.使用 pd.merge() 合并

    pd.merge(df, price_sum, left_on='color', right_index=True, suffixes=['', '_sum'])

    使用add_prefix(), add_suffix() 给聚合的数据修改列名

    df.groupby(by='color').sum()[['price']].add_prefix('mean_')

    df.groupby(by='color').sum()[['price']].add_suffix('_mean')

    可以使用transform和apply实现相同功能

    在transform或者apply中传入函数名即可

    df.groupby(by='color').sum()[['price']] .transform(sum)

    df.groupby(by='color').sum()[['price']] .apply(sum) # 会将字符串也相加

     

  • 相关阅读:
    多表联合查询,利用 concat 模糊搜索
    order by 中利用 case when 排序
    Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)
    ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述
    ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室
    ASP.NET Core 2.2 基础知识(十六) SignalR 概述
    ASP.NET Core 2.2 基础知识(十五) Swagger
    ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
    linux磁盘管理 磁盘查看操作
    linux磁盘管理 文件挂载
  • 原文地址:https://www.cnblogs.com/Deaseyy/p/11921636.html
Copyright © 2020-2023  润新知