数据分析——利⽤pandas对数据进⾏合并、筛选以及排序等操作
一、数据合并(两种方法)
①concat
import pandas as pdimport numpy as npdf = 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 表示重新⽣成索引
运行结果:
②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 pddf1=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 pddf1=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']>25bool2= df1['age']<30df3 = 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)
希望本文的内容对大家的学习或者工作能带来一定的帮助,每天进步一点点,加油