本文框架
- 0. 导入Pandas
- 1. 数据读取与预处理
- 2. 使用单个label值筛选数据
- 3. 使用列表名批量筛选
- 4. 使用区间进行范围筛选
- 5. 使用条件表达式筛选
- 5.1 简单条件表达式
- 5.2 复杂条件筛选
- 5.3 定义函数筛选
0. 导入Pandas
代码语言:javascript复制import pandas as pd
1. 数据读取与预处理
代码语言:javascript复制# 数据读取
data = pd.read_csv("./datas/03/Weather_2018.csv")
--------------------------------------------------------------------------------
# 查看前6行
data.head(6)
# 返回结果
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
0 2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 良 2
1 2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 优 1
2 2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 优 1
3 2018-01-04 0℃ -8℃ 阴 东北风 1-2级 28 优 1
4 2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 优 1
5 2018-01-06 2℃ -5℃ 多云~阴 西南风 1-2级 32 优 1
--------------------------------------------------------------------------------
# 设定索引为日期,方便按日期筛选。
# inplace:如果 True:操作在当前 DataFrame 上完成;如果 False:返回操作完成的副本
data.set_index("ymd",inplace=True)
--------------------------------------------------------------------------------
# 查看更改后的索引
data.index
# 返回结果
Index(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05',
'2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10',
..................
--------------------------------------------------------------------------------
# 查看更改索引后的前6行
data.head(6)
# 返回结果
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 良
2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 优 1
2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 优 1
2018-01-04 0℃ -8℃ 阴 东北风 1-2级 28 优 1
2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 优 1
2018-01-06 2℃ -5℃ 多云~阴 西南风 1-2级 32 优 1
--------------------------------------------------------------------------------
# 替换掉温度的后缀℃
# 先将数据转化成字符串,再将"℃"替换为空,最后再转化为数值
data["bWendu"] = data["bWendu"].str.replace("℃", "").astype("int32")
data["yWendu"] = data["yWendu"].str.replace("℃", "").astype("int32")
--------------------------------------------------------------------------------
# 查看转化后数据框
data.head()
# 返回结果
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-01-01 3 -6 晴~多云 东北风 1-2级 59 良 2
2018-01-02 2 -5 阴~多云 东北风 1-2级 49 优 1
2018-01-03 2 -5 多云 北风 1-2级 28 优 1
2018-01-04 0 -8 阴 东北风 1-2级 28 优 1
2018-01-05 3 -6 多云~晴 西北风 1-2级 50 优 1
2. 使用单个label值筛选数据
loc[]接受两个参数,并以","分隔;逗号前表示行,逗号后表示列。
代码语言:javascript复制# 查询单个值
data.loc["2018-01-03","bWendu"]
# 返回结果
2
--------------------------------------------------------------------------------
# 查询多个值,得到一个Series;多个值时要用中括号括起来。
data.loc["2018-01-03",["bWendu","yWendu"]]
# 返回结果
bWendu 2
yWendu -5
Name: 2018-01-03, dtype: object
3. 使用列表名批量筛选
使用列表名筛选行和列中的多个ID时,需要用中括号将ID括起来;
如果筛选行或列的单个ID,则不需要使用中括号。
代码语言:javascript复制# 批量查询,得到DataFrame
data.loc[["2018-01-01","2018-01-03"],["bWendu","aqiLevel"]]
# 返回结果
bWendu aqiLevel
ymd
2018-01-01 3 2
2018-01-03 2 1
--------------------------------------------------------------------------------
# 批量查询,得到Series
data.loc[["2018-01-01","2018-01-03"],"bWendu"]
# 返回结果
ymd
2018-01-01 3
2018-01-03 2
Name: bWendu, dtype: int32
4. 使用区间进行范围筛选
使用区间筛选时,行和列的ID无需使用中括号括起来。
代码语言:javascript复制# 区间查询
data.loc["2018-01-01":"2018-01-03","bWendu":"fengxiang"]
# 返回结果
bWendu yWendu tianqi fengxiang
ymd
2018-01-01 3 -6 晴~多云 东北风
2018-01-02 2 -5 阴~多云 东北风
2018-01-03 2 -5 多云 北风
5. 使用条件表达式筛选
使用条件表达式返回的是布尔数组。
5.1 简单条件表达式
筛选最高气温大于36摄氏度的天气。
代码语言:javascript复制# 简单条件表达式筛选
data.loc[data["bWendu"]>36,:] #等同于data.loc[data["bWendu"]>36]
# 返回值
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-06-05 38 25 多云 西南风 4-5级 94 良 2
2018-06-27 37 25 多云 东北风 3-4级 54 良 2
2018-06-29 37 25 晴 南风 1-2级 59 良 2
2018-06-30 37 23 雷阵雨~多云 东南风 3-4级 81 良 2
2018-07-05 37 24 多云~雷阵雨 东南风 1-2级 104 轻度污染 3
5.2 复杂条件筛选
筛选最低气温大于15,最高气温小于30,且天气为晴的日期;
组合条件用&符号合并,每个条件判断都得带括号。
代码语言:javascript复制# 复杂条件表达式筛选
data.loc[(data["bWendu"]<30) & (data["yWendu"]>15) & (data["tianqi"]=="晴"),:]
# 返回结果
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-04-28 27 17 晴 西南风 3-4级 125 轻度污染 3
2018-09-07 27 16 晴 西北风 3-4级 22 优 1
2018-09-09 28 16 晴 西南风 1-2级 51 良 2
5.3 定义函数筛选
代码语言:javascript复制# 使用lambda表达式筛选
# 筛选最低气温大于15,最高气温小于30,且天气为晴的日期
data.loc[lambda df:(df["bWendu"]<30) & (df["yWendu"]>15) & (df["tianqi"]=="晴"),:]
# 返回结果
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-04-28 27 17 晴 西南风 3-4级 125 轻度污染 3
2018-09-07 27 16 晴 西北风 3-4级 22 优 1
2018-09-09 28 16 晴 西南风 1-2级 51 良 2
--------------------------------------------------------------------------------
# 自定义函数筛选
# 筛选2018年7月且aqiLevel=1的天气
def filter(df):
return df.index.str.startswith("2018-07") & (df["aqiLevel"]==1)
data.loc[filter,:]
# 返回结果
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-07-10 30 22 多云~雷阵雨 南风 1-2级 48 优 1
2018-07-11 25 22 雷阵雨~大雨 东北风 1-2级 44 优 1
2018-07-12 27 22 多云 南风 1-2级 46 优 1
2018-07-16 31 24 中雨~雷阵雨 南风 1-2级 43 优 1
2018-07-17 27 23 中雨~雷阵雨 西风 1-2级 28 优 1
2018-07-24 28 26 暴雨~雷阵雨 东北风 3-4级 29 优 1
2018-07-25 32 25 多云 北风 1-2级 28 优 1
2018-07-26 33 25 多云~雷阵雨 东北风 1-2级 40 优 1