查询数据
操纵的数据
首先在同级目录创建一个文本tq.csv
里面的内容是:
ymd,bWendu,yWendu,tianqi,fengxiang,fengji,aqi,aqiInfo,aqiLevel
20231116,15c,8c,晴,北风,3,50,良,2
20231117,18c,10c,多云,东南风,2,65,轻度污染,3
20231118,22c,15c,小雨,西风,4,80,中度污染,4
20231119,20c,12c,阴,北风,3,45,优,1
20231120,16c,9c,晴,东风,2,55,良,2
20231121,19c,11c,阴,西南风,3,60,良,2
20231122,14c,7c,小雨,北风,4,75,轻度污染,3
20231123,17c,10c,多云,东风,2,40,优,1
20231124,23c,15c,晴,西北风,3,58,良,2
20231125,21c,13c,阴,南风,2,70,轻度污染,3
对应表格是这样的
0.引入库
import pandas as pd
1.读取数据
df = pd.read_csv("tq.csv")
2.设置索引 使用ymd作为索引
df.set_index("ymd", inplace=True)
# 查看索引
print(df.index)
# 查看整个表的前几行
print(df.head(4))
3.数据格式化 将温度的’c‘去掉并将数据改成int类型
# [:,xxx] 是xxx字段的全部行
df.loc[:, "bWendu"] = df["bWendu"].str.replace("c", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("c", "").astype("int32")
4.用print(df)输出表格内容
5.查询
# 查询单个数据
df.loc[行索引,列字段] #或者
df.loc[行索引][列字段]
# 上面两种的逻辑不同,第一种是直接根据两个索引查找,第二个是df.loc[行索引]先返回Series对象,然后根据列索引返回
# 例如
print(df.loc[20231122]['bWendu']) # 输出14
# 二维查询
df.loc[[行索引1,行索引2,...],[列索引1,列索引2,...]]
# 会返回行列索引对应数据组成的DataFrame对象
# 例如
print(df.loc[[20231122,20231123,20231120],["yWendu","bWendu"]])
"""
输出
yWendu bWendu
ymd
20231122 7 14
20231123 10 17
20231120 9 16
"""
# 区间查询
df.loc[[最小行索引:最大行索引],[最小列索引:最大列索引]]
# 返回的也是一个DataFrame
# 例如
print(df.loc[20231121:20231125, ['bWendu', 'yWendu']])
"""
输出
bWendu yWendu
ymd
20231121 19 11
20231122 14 7
20231123 17 10
20231124 23 15
20231125 21 13
"""
# 条件查询
df.loc[(df['列索引']的逻辑运算1)&(df['列索引']的逻辑运算2)]
# 最大温度小于等于30 最低温度大于等于12
df,loc[(df['bWendu']<=30)&(df['yWendu']>=12)]
# 也可以传入函数
# 例如
def f(par):
return (df['bWendu'] <= 30) & (df['yWendu'] >= 12) & (df['tianqi'] == '晴')
print(df.loc[f(df)])
"""
输出
bWendu yWendu tianqi fengxiang fengji aqi aqiInfo aqiLevel
ymd
20231124 23 15 晴 西北风 3 58 良 2
"""