提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
文章目录- 目录一览
- 1loc
- 2多条件筛选
- 3iloc
- 4数值筛选
- 5字符筛选
- 6索引以及切片取值
- 7query()函数
- 8表达式
- 9eval()
- 10filter函数
- 11where和mask函数
- 12at和iat
- 13any和all
- 14isin(提取其他表该列)
使用的行索引名或者列属性直接来取数
选择一列或者多列
df['A']#选择一列 df[['A','B']]#选择多列
选择行loc
# 1、取出单个列 df.loc[:,"name"] # 2、取出多个列 df.loc[:,["name","age"]] # 3、使用数值,取出第一行,索引为0 df.loc[0] # 4、取出索引为0,1,3的行记录,此时列字段是全部保留 df.loc[[0,1,3]] df.loc[[0,1,3],:] # 使用冒号:,表示全部列,效果同上 # 5、取出部分行和部分列 df.loc[[0,1,3],["name","sex","score"]] # 6、!!!使用索引切片:同时包含起止位置 df.loc[0:3] df.loc[:] # 表示所有数据 # 7所有行的age及后面全部列 df.loc[:,"age":] #8、部分行,age及其后面的全部列 df.loc[1:3,"age":] # 9、针对非数值型行索引的取数 df.loc["语文"]#对行取数Series型数据 df.loc[["语文"]]#两个方括号取出的是DataFrame数据 df.loc[["语文","英语"]] #10、取出部分行和列数据 df.loc[["语文","英语"],"小明"] # 指定我们需要的列属性名 df.loc[[1,2],["name","score"]] #选择连续和非连续的行(以索引标签为选择参数) df.loc[20:60]#从索引20开始连续选择行到59,索引从0开始 #选择包含某个特定值的行(以具体行的值为参数) df.loc[df.A=='a']#把A列里面为a的筛选出来
选择包含多个变量要求的行(各个变量之间要用圆括号括起来,汉字的条件要用名称索引法(中括号)而不能用点取法)
2多条件筛选#指定数值筛选 df.loc[(df.A=='a')&(df['编码']=='001')]#且 df[(df['age']>10)|(df['age']<5)]#或 #数值形筛选 df[(df['age']>10)|(df['age']<5)]#或 #字符型筛选
选择包含多个变量条件的行和特定要求的列
df.loc[(df.A=='a')&(df['编码']=='001'),['列1','列2']
选择某一个元素值
df.loc[3,'A']#loc是按索引选取 df.iloc[3,1]#iloc是按位置选取3iloc
iloc(行,列)是按位置选取的(方法跟loc类似)
df.iloc[:3] # 取出前3行记录 df.iloc[[1,2,4]] # 取出多行记录1,2,4 df.iloc[2,0:2]#取第二行,第1,2列 df.iloc[2,0:5:2] # 列方向上使用切片,步长为2 df.iloc[2,[1,3]] # 行索引为2,列索引号为1 和 3可用列表 df.iloc[:, np.r_[0,2:4]]# 取出不连续的行列数据,使用np.r_ df.iloc[1:10,5:10]#行和列方向同时使用切片4数值筛选
df.eq() # 等于相等 == df.ne() # 不等于 != df.le() # 小于等于 >= df.lt() # 小于 < df.ge() # 大于等于 >= df.gt() # 大于 > df[df.age.eq(20)] #age年龄值等于20 #其他同理 df[(df.df.age.ge(20))&(df.df.age.le(50))]#age年龄值大于等于20,age年龄值小于等于505字符筛选
字符类型数据的筛选主要是通过python和pandas中相关函数;
包含:str.contains
开始:str.startswith
结束:str.endswith
df[df['name'].str.contains('王')]#1名字里面包含王
df[df['name'].str.startswith('王')]#1名字开头王
df[df['name'].str.endswith('王')]#1名字结尾王
#如果字段中带有空值
#解决方法1:带上参数
df[df['name'].str.contains('王',na=False)]
#解决方法2:通过布尔值的比较判断
df[df['name'].str.contains('王')==True]
6索引以及切片取值
索引取数
直接通过某个索引值来取数,这种情况很少用
df[df.index==2]
切片取数
pandas中切片取数和Python中是相同的:
左边索引从0开始计数,右边索引从-1开始计数
切片规则:start:stop:step,分别表示起始位置start,结束位置stop,步长step(可正可负)
不包含结束索引位置的元素:含头不含尾,请记住索引切片的重要规则!!!
df[:2] #从头开始取到2(不含索引2) df[2:5] #索引从2开始取到4.不含5 df[:-1]#从头开始取到倒数第二位 df[-3:]#从倒数第三位开始取到最后7query()函数
#1、使用数值型表达式
df.query('math > chinese > 110')
df.query('math + chinese > 255')
df.query('math == chinese')
df.query('(math > 110) and (chinese < 135)') # 两个不等式
#2、使用字符型表达式
df.query('sex != "女"') # 不等于女,就是全部男
df.query('sex not in ("女")') # 不在女中就是男
df.query('sex in ("男","女")') # 性别在男女中就是全部人
#3、传入变量;变量在使用的时候需要在前面加上@
# 设置变量
a = df.math.mean()
a
df.query('math > @a + 10')
df.query('math < (`chinese` + @a) / 2')
8表达式
#取反操作 df[~(df['sex'] == '男')] # 取出不是男生的数据 #指定某个属性的值为具体的数据 df[df.sex == '男'] # 等同于 df[df['sex'] == '男'] #不等式表达式 df[df['math'] > df['chinese']] #逻辑运算符 df[(df['math'] > 120) & (df['chinese'] < 140)]9eval()
#1、使用数值型表达式
df.eval('math > 125') # 得到的是bool表达式
df[df.eval('math > 125')]
df[df.eval('math > 125 and chinese < 130')]
#2、字符型表达式
df[df.eval('sex in ("男")')]
# 3、使用变量
b = df.chinese.mean() # 求均值
df[df.eval('math < @b+5')]
10filter函数
使用方法:直接指定、正则指定、模糊指定、其中axis=1指定列名;axis=0指定索引
#1、直接指定属性名 df.filter(items=["chinese","score"]) # 列名操作 #直接指定行索引 df.filter(items=[2,4],axis=0) # 行筛选 #2、通过正则指定 df.filter(regex='a',axis=1) # 列名中包含 df.filter(regex='^s',axis=1) # 列名以s开始 df.filter(regex='e$',axis=1) # 列名以e结束 df.filter(regex='3$',axis=0) # 行索引包含3 #3、模糊指定 df.filter(like='s',axis=1) # 列名中包含s df.filter(like='2',axis=0) # 行索引包含2 # 同时指定列名和索引 df.filter(regex='^a',axis=1).filter(like='2',axis=0)11where和mask函数
where:取出满足要求的数据,不满足的显示为NaN
mask:取出不满足要求的数据,满足的显示为NaN
s = df["score"] s.where(s>=600)#不满足的显示为NaN s.where(s>=610,600) # 不满足条件的赋值为600 df.where((df.sex=='男') & (df.math > 125)) #mask函数 s.mask(s>=600) # 和where相反:返回的都是小于600的数据 s.mask(s>=610, 600) # 不满足条件的赋值为600 #mask函数接受多个条件: # 取值和where相反 df[(df.mask((df.sex=='男') & (df.math > 125)) == df).sex]12at和iat
#at函数类似于loc,但是at函数取出的仅仅是一个值 df.at[4,"sex"] df.at[2,"name"] df.at['语文','小孙']# 同时指定索引和列名 df.loc[1].at['age']# at、loc连用 df.name.at[4] #列名为name的第4个元素
#和iloc一样,仅仅支持对数字索引操作 df.iat[2,4] df.loc[2].iat[4] df.iloc[2].iat[4]13any和all
any:如果至少有一个为True,则为True
all:需要所有结果为True,才会为True
当传入的axis=1,会按照行进行查询;axis=0表示按照列查询
14isin(提取其他表该列)
#df表name列包含 name表种的index列全部筛选出来
df[df['姓名'].isin(name['index'].tolist())]
#包含,且需转化为字段
df.loc[df['姓名'].isin(list('BDH')),'平时成绩']=89



