找回密码
 会员注册
查看: 29|回复: 0

快醒醒,别睡了!...讲数据分析pandas库了——<4>

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-12 09:06:21 | 显示全部楼层 |阅读模式
一、废话不多说,直接开讲1、DataFrame的索引和切片1.1 选择列        当想要获取df中某列数据时,只需要在df后面的方括号中指明要选择的列即可。如果是一列,则只需要传入一个列名;如果是同时选择多列,则传入多个列名即可(注意:多个列名用一个list存放)#获取一列df[col]#获取多列df[[col1,col2]]        除了传入具体的列名,我们可以传入具体列的位置,即第几行,对数据进行选取,通过传入位置来获取数据时需要用到iloc方法。即如下代码df.iloc[,[0,2]]1.2 按行列索引选择        DataFrame对象按照行列检索获取,可以使用loc和iloc函数,方括号中逗号之前的部分表示要获取的行的索引,如果输入一个冒号,或不输入任何数值表示获取所有的行或列,逗号之后方括号表示要获取的列的索引。df.loc[普通行索引,普通列索引]df.iloc[位置行索引,位置列索引]1.3 loc与iloc获取看实例:importnumpyasnpimportpandasaspddata=pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=list('ABCD'))#获取行为'b'的行data.loc['b']#使用iloc获取,行为'b'的行,行号为1data.iloc[1]其中首先用np生成一个一维数组,用reshape将其转变成3行4列的二维数组,在通过DsteFrame将其装换成类似于二维数组的列表,并更改行索引名为a、b、c,列索引为A、B、C、D,再将这段数组用date来接收,用loc来索引名为b的行,用iloc来索引数值为1的索引行,其打印结果相同,如下:                   • 获取'A'列所有行data.loc[:,'A']data.iloc[:,0]逗号左右分别表示行和列,两行代码运行结果都一样                         • 获取部分行部分列:#获取abc行,AB列data.loc[['a','b','c'],['A','B']]data.iloc[[0,1,2],[0,1]]        上部分为获取行号为a,b,c,列号为A,B的结果,以及行索引值为0,1,2,列索引值为0,1的所对应的值 ,其所对应结果都一样• 获取满足条件的行:df[df[“支出”]>10]df[(df[“支出”]>10)&(df[“性别”]=='女')]df[“支出”]>10为列‘支出’这一列中所对应的数值大于10的行,其返回的是布尔值,再用df将这个布尔值括起来即表示将布尔值为True的行打印出来(df[“支出”]>10)&(df[“性别”]=='女')这段则表示同时满足支出大于10,性别等于女的行。2、isin()选择        • df.isin(values)返回结果为相应的位置是否匹配给出的values        • values为序列时:对应每个具体值        •​​​​​​​ values为字典时:对应各个变量名称        •​​​​​​​ values为数据框时:同时对应数值和变量名称​​​​​​​df.col.isin([1,3,5])df[df.col.isin([1,3,5])]df[df.col.isin(['val1','val2'])]df[df.index.isin(['val1','val2'])]df 是一个DataFrame对象。col 是DataFrame中的一列(Series)。.isin([1,3,5]) 是一个方法,用于判断col 中的元素是否包含在 [1,3,5] 这个列表中。3、query()的使用 使用boolean值表达式进行筛选df.query(expr:语句表达式inplace=False;是否直接替换原数据框)可以使用前缀“@”引用环境变量等号为==,而不是= expr是一个字符串,表示查询条件。查询条件可以使用DataFrame中的列名,并使用关系运算符和逻辑运算符进行比较和组合。importpandasaspd#创建一个示例DataFramedata={'A':[1,2,3,4,5],'B':[6,7,8,9,10],'C':[11,12,13,14,15]}df=pd.DataFrame(data)#使用query函数进行查询result=df.query('A>2')#查询A列大于2的行print(result)result=df.query('A>2andB
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 01:26 , Processed in 1.234767 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表