python数据分析之pandas(3)

   日期:2020-07-15     浏览:160    评论:0    
核心提示:python数据分析之pandas(3)前言今天来说说pandas的一些数据结构,主要是一些查询方法,包括loc、iloc、where、query等方法,本人最喜欢的查询方式是iloc,它是根据索引来进行的查询。但是loc既能查询,也能够覆盖写入,也是一个很棒的方法,而它主要是根据标签来查询的。开始...

python数据分析之pandas(3)

前言

今天来说说pandas的一些数据结构,主要是一些查询方法,包括loc、iloc、where、query等方法,本人最喜欢的查询方式是iloc,它是根据索引来进行的查询。但是loc既能查询,也能够覆盖写入,也是一个很棒的方法,而它主要是根据标签来查询的。

开始

读取数据

和往常一样,我们需要先读取数据,然后才能对数据进行操作和分析

df = pd.read_csv("../pandas/ant-learn-pandas-master/datas/beijing_tianqi/beijing_tianqi_2018.csv")


数据读取完毕后,就开始我们今天的学习。之前提及了一下loc方法既能查询数据,还可以覆盖写入,现在就来展示一下吧。

df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')


先解释一下这个语句的功能,这两个语句主要是把bWendu和yWendu两列的“℃”这个单位去掉,用replace方法实现。然后顺便将它们的格式转换为“int32”类型。这里要注意以下的是“str”这个方法,它只能对字符串使用,不能对别的类型进行操作,不然会报错。
接下来对 loc() 方法进行一下解释,它可以输入两个参数,第一个参数是index(即行标签),第二个参数是column(即列标签)。可以进行精准定位,同时也可以通过切片进行多行查找。接下来就展示一下吧,它神奇的用法。

使用单个label值查询数据

df.loc['2018-01-03', 'bWendu']	# 得到单个值,两个参数都是单个数据,即为精准查找,返回一个值。
2
df.loc['2018-01-03', ['bWendu', 'yWendu']]	# 如果有一个参数为多个数据,得到一个Series
bWendu     2
yWendu    -5

loc通过输入行和列的标签,进行不同的查询,而它返回的结果根据它的参数不同而返回不同的类型。都为一个查询参数,则返回一个精确的值,至多一个参数有多个查询参数,则返回一个series。而iloc则是输入索引号,简单来说就是数字,就和数组的查询一样,上面的查询如果换成iloc方法则是:

df.iloc[2, 0]
df.iloc[2, [0, 1]]
它们返回的结果一样。

使用值列表批量查询

除了进行单个查找,还可以进行批量处理,同时输入多个查询参数或者使用切片参数。

df.loc[['2018-01-03','2018-01-04','2018-01-05'], 'bWendu'] # 得到Series
ymd
2018-01-03    2
2018-01-04    0
2018-01-05    3
df.loc[['2018-01-03','2018-01-04','2018-01-05'], ['bWendu', 'yWendu']]	# 得到DataFrame
		bWendu	yWendu
ymd		
2018-01-03	2	-5
2018-01-04	0	-8
2018-01-05	3	-6

上面讲到了一个参数有多个查询值,如果两个参数都有多个查询值,就会返回一个表格类型。我们通过python提供的切片能够实现更加简单的操作,可以将上述代码简化为:

# 行index按区间
df.loc['2018-01-03':'2018-01-05', 'bWendu']
# 列index按区间
df.loc['2018-01-03', 'bWendu':'fengxiang']
# 行和列都按区间查询
df.loc['2018-01-03':'2018-01-05', 'bWendu':'fengxiang']

这些都是loc方法能够进行的操作,单个查询,批量查询,区间查询,我们能够很方便的分析我们需要的数据。而iloc方法则是将loc中的标签换成索引号,同时loc的操作iloc同样的具有。

使用条件表达式查询

df.loc[df["yWendu"]<-10, :] #返回数据
df["yWendu"]<-10	# 观察一下这里的boolean条件,返回True或False

查询“yWendu”小于-10的所有数据,就是检测每行"yWendu"是否小于-10,则如果是则df[“yWendu”]<-10返回True,就会输出这一行。

复杂条件查询

## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
df.loc[(df["bWendu"]<=30) & (df["yWendu"]>=15) & (df["tianqi"]=='晴') & (df["aqiLevel"]==1), :]

这个和上面的一样,只是加了联合查询,通过多个条件约束进行查询,本质都是一样的。我们还可以将后面的条件换成lambda表达式或者自己编写一个约束函数。可以自己多尝试一下。

结尾

希望指出不足,共同探讨,共同进步,感谢观看。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服