zoukankan      html  css  js  c++  java
  • python 数据清洗之数据合并、转换、过滤、排序(转)

    原文:https://blog.csdn.net/xwd18280820053/article/details/70655144

    数据合并

    在pandas中可以通过merge对数据进行合并操作。

    import numpy as np
    
    import pandas as pd
    
    data1 = pd.DataFrame({'level':['a','b','c','d'],
    
                     'numeber':[1,3,5,7]})
    
     
    
    data2=pd.DataFrame({'level':['a','b','c','e'],
    
                     'numeber':[2,3,6,10]})
    
    print(data1)

    结果为:

    print(data2)

    结果为:

    print(pd.merge(data1,data2))

    结果为:

    可以看到data1和data2中用于相同标签的字段显示,而其他字段则被舍弃,这相当于SQL中做inner join连接操作。

    此外还有outer,ringt,left等连接方式,用关键词how的进行表示。

    data3 = pd.DataFrame({'level1':['a','b','c','d'],
    
                     'numeber1':[1,3,5,7]})
    
    data4=pd.DataFrame({'level2':['a','b','c','e'],
    
                     'numeber2':[2,3,6,10]})
    
    print(pd.merge(data3,data4,left_on='level1',right_on='level2'))

    结果为:

    两个数据框中如果列名不同的情况下,我们可以通过指定letf_on 和right_on两个参数把数据连接在一起

    print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))

    结果为:

    其他详细参数说明

    重叠数据合并

    有时候我们会遇到重叠数据需要进行合并处理,此时可以用comebine_first函数。

    data3 = pd.DataFrame({'level':['a','b','c','d'],

                     'numeber1':[1,3,5,np.nan]})

    data4=pd.DataFrame({'level':['a','b','c','e'],

                     'numeber2':[2,np.nan,6,10]})

    print(data3.combine_first(data4))

    结果为:

    可以看到相同标签下的内容优先显示data3的内容,如果一个数据框中的某一个数据是缺失的,此时另外一个数据框中的元素就会补上

    这里的用法类似于np.where(isnull(a),b,a)

    数据重塑和轴向旋转

    这个内容我们在上一篇pandas文章有提到过。数据重塑主要使用reshape函数,旋转主要使用unstack和stack两个函数。

    data=pd.DataFrame(np.arange(12).reshape(3,4),

                  columns=['a','b','c','d'],

                  index=['wang','li','zhang'])

    print(data)

    结果为:

    print(data.unstack())

    结果为:

    数据转换

    删除重复行数据

    data=pd.DataFrame({'a':[1,3,3,4],

                  'b':[1,3,3,5]})

    print(data)

    结果为:

    print(data.duplicated())

    结果为:

    可以看出第三行是重复第二行的数据所以,显示结果为True

    另外用drop_duplicates方法可以去除重复行

    print(data.drop_duplicates())

    结果为:

    替换值

    除了使用我们上一篇文章中提到的fillna的方法外,还可以用replace方法,而且更简单快捷

    data=pd.DataFrame({'a':[1,3,3,4],

                  'b':[1,3,3,5]})

    print(data.replace(1,2))

    结果为:

    多个数据一起换

    print(data.replace([1,4],np.nan))

    数据分段

    data=[11,15,18,20,25,26,27,24]

    bins=[15,20,25]

    print(data)

    print(pd.cut(data,bins))

    结果为:

    [11, 15, 18, 20, 25, 26, 27, 24][NaN, NaN, (15, 20], (15, 20], (20, 25], NaN, NaN, (20, 25]]

    Categories (2, object): [(15, 20] < (20, 25]]

    可以看出分段后的结果,不在分段内的数据显示为na值,其他则显示数据所在的分段。

    print(pd.cut(data,bins).labels)

    结果为:

    [-1 -1 0 0 1 -1 -1 1]

    显示所在分段排序标签

    print(pd.cut(data,bins).levels)

    结果为:

    Index([‘(15, 20]’, ‘(20, 25]’], dtype=’object’)

    显示所以分段标签

    print(value_counts(pd.cut(data,bins)))

    结果为:

    显示每个分段值得个数

    此外还有一个qcut的函数可以对数据进行4分位切割,用法和cut类似。

    排列和采样

    我们知道排序的方法有好几个,比如sort,order,rank等函数都能对数据进行排序

    现在要说的这个是对数据进行随机排序(permutation)

    data=np.random.permutation(5)

    print(data)

    结果为:

    [1 0 4 2 3]

    这里的peemutation函数对0-4的数据进行随机排序的结果。

    也可以对数据进行采样

    df=pd.DataFrame(np.arange(12).reshape(4,3))

    samp=np.random.permutation(3)

    print(df)

    结果为:

    print(samp)

    结果为:

    [1 0 2]

    print(df.take(samp))

    结果为:

     
     
  • 相关阅读:
    阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
    数据库中间件 ShardingJDBC 源码分析 —— SQL 解析(三)之查询SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(六)之删除SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(五)之更新SQL
    消息队列中间件 RocketMQ 源码分析 —— Message 存储
    源码圈 300 胖友的书单整理
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(一)分库分表配置
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(四)之插入SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由
    C#中Math类的用法
  • 原文地址:https://www.cnblogs.com/lshan/p/12007261.html
Copyright © 2011-2022 走看看