- 设定索引为日期,方便查询
df.set_index("ymd", inplace=True)
- 查看时间序列号索引列
df.index
# 索引名称 ymd 索引长度365
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',
...
'2018-12-22', '2018-12-23', '2018-12-24', '2018-12-25', '2018-12-26',
'2018-12-27', '2018-12-28', '2018-12-29', '2018-12-30', '2018-12-31'],
dtype='object', name='ymd', length=365)
- 以时间为索引后,查看前几行数据
df.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
- 替换掉温度后的℃
前面行:为所有的行, 指定列
df.loc[:, 'bWendu'] = df['bWendu'].str.replace('℃', '').astype('int32')
df.loc[:, 'yWendu'] = df['yWendu'].str.replace('℃', '').astype('int32')
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
-
使用单个label 值查询数据
行或者列,都可以只传单个值,实现精确匹配
# 查询某个单元格的值 行 列
df.loc['2018-01-04', 'bWendu']
0
# 查询某些单元格的值(行、列),返回Series; 查询条件(行单个, 列多个)
df.loc['2018-01-04', ['bWendu', 'tianqi']]
bWendu 0
tianqi 阴
Name: 2018-01-04, dtype: object
-
使用值列表批量查询
查询条件(行多个, 列单个); 返回Series
df.loc[['2018-01-02', '2018-01-03', '2018-01-04'], 'bWendu']
ymd
2018-01-02 2
2018-01-03 2
2018-01-04 0
Name: bWendu, dtype: object
查询条件(行多个, 列多个); 返回DataFrame
df.loc[['2018-01-02', '2018-01-03', '2018-01-04'], ['bWendu', 'yWendu']]
bWendu yWendu
ymd
2018-01-02 2 -5
2018-01-03 2 -5
2018-01-04 0 -8
-
使用数值区间进行范围查询,区间既包含开始,也包含结束
查询某些行区间的某一列的值 即index 区间的值 行开始:结束, 列
df.loc['2018-01-02':'2018-01-04', 'bWendu']
ymd
2018-01-02 2
2018-01-03 2
2018-01-04 0
Name: bWendu, dtype: object
查询某一行的某些列区间的值 即index的区间数据 行, 列开始:结束
df.loc['2018-01-04', 'bWendu':'tianqi']
bWendu 0
yWendu -8
tianqi 阴
Name: 2018-01-04, dtype: object
查询某些行与某些列区间的数据 即index的区间数据 行开始:结束, 列开始:结束
df.loc['2018-01-02':'2018-01-04', 'bWendu':'tianqi']
bWendu yWendu tianqi
ymd
2018-01-02 2 -5 阴~多云
2018-01-03 2 -5 多云
2018-01-04 0 -8 阴
-
使用条件表达式查询,bool列表的长度等于行数或列数
简单条件查询,最低温度小于-10度的列表
df.loc[df['yWendu']<-10, :] 前行 温度小于10, 列取全部
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-01-23 -4 -12 晴 西北风 3-4级 31 优 1
2018-01-24 -4 -11 晴 西南风 1-2级 34 优 1
... ... ... ... ... ... ... ... ...
2018-12-29 -3 -12 晴 西北风 2级 29 优 1
2018-12-30 -2 -11 晴~多云 东北风 1级 31 优 1
查询最低温度是否小雨-10度
df['yWendu']<-10
ymd
2018-01-01 False
2018-01-02 False
...
2018-12-30 True
2018-12-31 False
Name: yWendu, Length: 365, dtype: bool
-
复合查询:组合条件用&符号合并,每个条件判断都得带括号
查询最高气温小于30度,并且最低气温大于15度,并且晴天,并且天气为优的数据
df.loc[(df['bWendu'] <= 30) & (df['yWendu'] >= 15) & (df['tianqi'] == '晴') & (df['aqiLevel'] == 1), :]
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-08-24 30 20 晴 北风 1-2级 40 优 1
2018-09-07 27 16 晴 西北风 3-4级 22 优 1
天气的 最高气温小于30度,并且最低气温大于15度,并且晴天,并且天气为优 是否为ture false
(df['bWendu'] <= 30) & (df['yWendu'] >= 15) & (df['tianqi'] == '晴') & (df['aqiLevel'] == 1)
ymd
2018-01-01 False
2018-01-02 False
...
2018-12-30 False
2018-12-31 False
Length: 365, dtype: bool
-
调用函数查询
获取 最高温度大于30,且最低温度15 的数据 lambda
df.loc[lambda df:(df['bWendu'] <= 30) & (df['yWendu'] >= 15), :]
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-04-28 27 17 晴 西南风 3-4级 125 轻度污染 3
2018-04-29 30 16 多云 南风 3-4级 193 中度污染 4
... ... ... ... ... ... ... ... ...
2018-09-19 26 17 多云 南风 1-2级 52 良 2
2018-09-20 27 16 多云 西南风 1-2级 63 良 2
64 rows × 8 columns
查询9月份空气质量为优的数据
def query_weather_data(df):
return df.index.str.startswith('2018-09') & (df['aqiLevel'] == 1)
df.loc[query_weather_data, :]
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-09-01 27 19 阴~小雨 南风 1-2级 50 优 1
2018-09-04 31 18 晴 西南风 3-4级 24 优 1
... ... ... ... ... ... ... ... ...
2018-09-29 22 11 晴 北风 3-4级 21 优 1
2018-09-30 19 13 多云 西北风 4-5级 22 优 1