美文网首页
数据分析—利⽤pandas对数据进⾏合并、筛选以及排序等操作

数据分析—利⽤pandas对数据进⾏合并、筛选以及排序等操作

作者: python与数据分析 | 来源:发表于2020-09-22 16:48 被阅读0次
    【导语】学会利⽤pandas对数据进⾏合并、筛选以及排序等操作

    一、数据合并(两种方法)

    ①concat
    import pandas as pd
    import numpy as np
    df = pd.DataFrame([[2,5, 7, 4,9],
                      [3, np.nan, np.nan,np.nan, 1],
                     [2,1, np.nan, np.nan, 5],
                    [4,2, 3, np.nan, 4]],
                     columns=list('ABCDE'))
    
    df1 = pd.DataFrame([[1,2,3,4,5],
                      [3, 0, 0,0, 1],
                     [2,1, 0, 0, 5],
                    [4,2, 3, 0, 4]],
                     columns=list('ABCDE'))
    
    pd.concat([df,df1],axis=0,join='outer',ignore_index=True)
    

    各个参数的含义为:

    • [df,df1]是我们要合并的数据,我们把他放在⼀个列表当中传⼊
    • axis=0 表示按⾏进⾏合并,如果为1表示按列进⾏合并
    • join='outer' 表示直接拼接在⼀块,如果为 inner则是按交集处理
    • ignore_index=True 表示重新⽣成索引
    运行结果:
    image.png
    ②merge
    格式:merge(left, right, how='inner', on=None,left_on =None,right_on =None,left_index =None,right_index =None)

    各参数含义为:

    • left和right是我们要合并的数据
    • how则是指定拼接⽅式 inner(默认)表示取交集部分 outer是直接拼接在⼀块,没内容的地⽅⽤ NAN填充
    • on是指定我们需要按照哪列进⾏拼接
    • left_on 左侧DataFarme中用作连接键的列
    • right_on 右侧DataFarme中用作连接键的列
    • left_index 将左侧的行索引用作其连接键
    • right_index 将右侧的行索引用作其连接键
    1.merge默认按相同字段合并,且取两个都有的。
    import pandas as pd
    df1=pd.DataFrame({'name':['kate','herz','catherine','sally'],
    'age':[25,28,39,35]})
    
    df2=pd.DataFrame({'name':['kate','herz','sally'],
    'score':[70,60,90]})
    pd.merge(df1,df2)
    

    age name score
    0 25 kate 70
    1 28 herz 60
    2 35 sally 90

    2.当左右连接字段不相同时,使用left_on,right_on
    import pandas as pd
    df1=pd.DataFrame({'name':['kate','herz','catherine','sally'],
    'age':[25,28,39,35]})
    
    df2=pd.DataFrame({'call_name':['kate','herz','sally'],
    'score':[70,60,90]})
    
    pd.merge(df1,df2,left_on="name",right_on='call_name'
    

    age name call_name score
    0 25 kate kate 70
    1 28 herz herz 60
    2 35 sally sally 90

    3.合并后,删除重复的列
    pd.merge(df1,df2,left_on='name',right_on='call_name').drop('name',axis=1)
    

    age call_name score
    0 25 kate 70
    1 28 herz 60
    2 35 sally 90

    4.参数how的使用
    • 1)默认:inner 内连接,取交集

      pd.merge(df1,df2,on='name',how='inner')
      

    age name score
    0 25 kate 70
    1 28 herz 60
    2 35 sally 90

    • 2)outer 外连接,取并集,并用nan填充
    df3=pd.DataFrame({'name':['kate','herz','sally','cristin'],
    'score':[70,60,90,30]})
    pd.merge(df1,df3,on='name',how='outer')
    

    age name score
    0 25 kate 70
    1 28 herz 60
    2 39 catherine NaN
    3 35 sally 90
    4 NaN cristin 30

    • 3)left 左连接, 左侧取全部,右侧取部分
    pd.merge(df1,df3,on='name',how='left')
    

    age name score
    0 25 kate 70
    1 28 herz 60
    2 39 catherine NaN
    3 35 sally 90

    • 4)right 有连接,左侧取部分,右侧取全部
    pd.merge(df1,df3,on='name',how='right')
    

    age name score
    0 25 kate 70
    1 28 herz 60
    2 35 sally 90
    3 NaN cristin 30

    二、数据筛选

    首先判断我们筛选的条件,如果条件成立则会返回True,表示该行被标记为True,否则被标 记为False,最后我们根据标记的True或者False来筛选出我们需要的数据,举个栗子

    bools= df1['age']>25
    

    df1['age']>25就是我们筛选的条件,我们将标记的结果赋值给bools,那么他是⼀个⼀维 数组Series对象,我们再利用

    df = df1[bools]
    

    就可以取到筛选后的数据了 如果有多个筛选条件那么就是⽤逻辑连接符链接起来即可,⽐如

    bool1= df['age']>25
    bool2= df1['age']<30
    df3 = df1[bool1 & bool2]
    
    & 与 ; | 或者

    三、数据排序

    数据排序同样是有两个⽅法sort_index()、sort_values(),这个排序跟我们列表排序的sort是 类似的,都是直接修改数据而不会生成一个新的数据。

    1、sort_index( )方法是按照行索引进行排序
    • inplace=True参数和我们之前⻅过的作⽤⼀样,⽤来控制是否直接对原始数据进⾏修改。
    • ascending可以控制排序的顺序,默认值为True从⼩到⼤排列,当它被设置为False的时候 就可以实现倒序排列。
    df1.sort_index(ascending=False,inplace=True)
    
    2、sort_values()可以指定具体列进行排序,它比sort_index( )方法多了一个参数by
    • by:决定了是按数据中的哪一列进行排序,将需要按照某列排序的列名赋值给by即可
    • inplace=True参数和我们之前⻅过的作⽤⼀样,⽤来控制是否直接对原始数据进⾏修改。
    • ascending可以控制排序的顺序,默认值为True从⼩到⼤排列,当它被设置为False的时候 就可以实现倒序排列。
    df1.sort_values(by='age',ascending=False,inplace=True)
    

    希望本文的内容对大家的学习或者工作能带来一定的帮助,每天进步一点点,加油

    相关文章

      网友评论

          本文标题:数据分析—利⽤pandas对数据进⾏合并、筛选以及排序等操作

          本文链接:https://www.haomeiwen.com/subject/fyvwyktx.html