Pandas系列教程(3)Pandas数据查询

摘要:
Pandas数据查询Pandas有几种查询数据的方法。df.loc方法根据行和列的标签值查询df.iloc方法。df.where方法df.query方法。loc可用于查询和覆盖雪,强烈建议Pandas使用df.loc来查询数据。使用单个标签值查询数据。使用值列表进行批量查询。使用值范围进行查询。使用条件表达式进行查询。调用函数进行查询。注意:以上查询方法适用于行和列
Pandas数据查询

pandas 查询数据的几种方法

  1. df.loc方法,根据行,列的标签值查询

  2. df.iloc方法,根据行,列的数字位置查询

  3. df.where方法

  4. df.query方法

.loc即可以查询,又能覆盖雪茹,强烈推荐

pandas 使用df.loc查询数据的方法

  1. 使用单个label值查询数据

  2. 使用值列表批量查询

  3. 使用数值区间进行范围查询

  4. 使用条件表达式查询

  5. 调用函数查询

注意:

  • 以上查询方法,即适用于行,也适用于列

  • 注意观察降维DataFrame>Series>值

1、读取数据

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)

print("打印前几行的数据:
 ", df.head())

# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)

# 时间序列见后续课程,本次按字符串处理
print("打印索引:
 ", df.index)

print("打印前几行的数据:
 ", df.head())

# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

print("打印每列的数据类型:
 ", df.dtypes)

print("打印前几行的数据:
 ", df.head())

2、使用单个label值查询数据

 行或者列,都可以只传单个值,实现精确匹配

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
# 数据的预处理
# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)
# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

# 打印前几行数据
print(df.head())

# 得到单个值(获取2018-01-03的最高温度)
print(df.loc['2018-01-03', 'bWendu'])

# 得到一个Series(获取2018-01-03的最高温度和最低温度)
print(df.loc['2018-01-03', ['bWendu', 'yWendu']])

3、使用值列表批量查询

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
# 数据的预处理
# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)
# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

# 打印前几行数据
print(df.head())

# 得到Series(获取['2018-01-03', '2018-01-04', '2018-01-05']的最高温度)
print(df.loc[['2018-01-03', '2018-01-04', '2018-01-05'], 'bWendu'])

# 得到DataFrame(获取['2018-01-03', '2018-01-04', '2018-01-05']的最高温度和最低温度)
print(df.loc[['2018-01-03', '2018-01-04', '2018-01-05'], ['bWendu', 'yWendu']])

4、使用数值区间进行范围查询

 注意:区间即包含开始,也包含结束

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
# 数据的预处理
# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)
# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

# 打印前几行数据
print(df.head(), '
', '*' * 50)

# 行index按区间
print(df.loc['2018-01-03':'2018-01-05', 'bWendu'], '
', '*' * 50)

# 列index按区间
print(df.loc['2018-01-03', 'bWendu':'fengxiang'], '
', '*' * 50)

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

5、使用条件表达式查询

 bool列表的长度等于行数或者列数

简单条件查询

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
# 数据的预处理
# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)
# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

# 简单查询, 最低温度低于-10度的列表
print(df.loc[df['yWendu'] < -10, :], '
', '*' * 50)

# 观察一下这里的boolean条件
print(df['yWendu'] < -10, '
', '*' * 50)

复杂条件查询

注意:组合条件用&符号合并,每个条件判断都得带括号

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
# 数据的预处理
# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)
# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

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

# 观察一下这里的boolean条件
print((df['bWendu'] <= 30) & (df['yWendu'] >= 15) & (df['tianqi'] == '') & (df['aqiLevel'] == 1))

6、调用函数查询

import pandas as pd

file_path = "../files/beijing_tianqi_2018.csv"
df = pd.read_csv(file_path)
# 数据的预处理
# 设定索引为日期,方便按日期筛选
df.set_index('ymd', inplace=True)
# 替换温度的后缀℃
df.loc[:, 'bWendu'] = df.loc[:, 'bWendu'].str.replace('', '').astype('int32')
df.loc[:, 'yWendu'] = df.loc[:, 'yWendu'].str.replace('', '').astype('int32')

# 直接写lambda表达式
print(df.loc[lambda df: (df['bWendu'] <= 30) & (df['yWendu'] >= 15), :])
print('*' * 50)

# 编写自己的函数,查询9月份,空气质量好的数据
def query_my_data(df):
    return df.index.str.startswith('2018-09') & df['aqiLevel'] == 1
print(df.loc[query_my_data, :])

免责声明:文章转载自《Pandas系列教程(3)Pandas数据查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇React实现组件缓存的一种思路auth组件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pandas 转换int类型出现 OverflowError错误

转换int类型:data[['m']] = data[['m']].astype(int) 报错:OverflowError: Python int too large to convert to C long 解决:data[['m']] = data[['m']].astype('int64') 即可! 参考文档: https://blog.csdn....

利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

  在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析。本部分关注可以聚合、合并、重塑数据的方法。 1、层次化索引   层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低纬度形式处理高纬度数据。我们来看一个简单的栗子:创建一个Ser...

pandas中关于accessor的骚操作

来自:Python那些事 pandas中accessor功能很强大,可以将它理解为一种属性接口,通过它获得额外的方法。 下面用代码和实例理解一下: importpandas as pd pd.Series._accessors 对于Series数据结构使用_accessors方法,我们得到3个对象:cat, str, dt。 .cat:用于分类数据...

pandas的基础使用

从 CSV 文件中读取数据 这个数据集是一个列表,蒙特利尔的 7 个不同的自行车道上每天有多少人。 broken_df = pd.read_csv('../data/bikes.csv') # 查看前三行 broken_df[:3] 你可以看到这完全损坏了,说明读取方式不合适。 read_csv 拥有一堆选项能够让我们修复它,在这里我们: 将列分隔符改...

分位函数(四分位数)概念与pandas中的quantile函数

p分位函数(四分位数)概念与pandas中的quantile函数 函数原型 DataFrame.quantile(q=0.5, axis=0, numeric_only=True, interpolation=’linear’) 参数 - q : float or array-like, default 0.5 (50% quantile 即中位数-第2...

DataFrame和python中数据结构互相转换

楔子 有时候DataFrame,我们不一定要保存成文件、或者入数据库,而是希望保存成其它的格式,比如字典、列表、json等等。当然,读取DataFrame也不一定非要从文件、或者数据库,根据现有的数据生成DataFrame也是可以的,那么该怎么做呢?我们来看一下 DataFrame转成python中的数据格式 转成json DataFrame转成json,...