入门pandas—筛选
作者:互联网
加载数据
标明一下sheet_name
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',sheet_name='Sheet1')
print(data)
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座
2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座
3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
按位置筛选,筛选第2行至第4行数据
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',sheet_name='Sheet1')
data2 = data.loc[2:4]
print(data2)
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座
3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
按值过滤,筛选所有男性
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',sheet_name='Sheet1')
i = data['性别']=='男' #i是条件
print(data[i]) #数据[条件]
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
多条件筛选,男性和总分大于等于150
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',sheet_name='Sheet1')
i = "性别=='男' and 总分>=150" #i是条件 query可以识别出字符串和and
print(data.query(i)) #数据.query(条件)
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
query 方法,可以直接接受一个查询字符串,是不是很像 Sql 呢.指定多个值也很简单,使用in 或not in,如下:
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',sheet_name='Sheet1')
i="姓名 in ['王松','王刚']"
print(data.query(i))
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
文本筛选:开头与结尾
格式:str.startswith( ) /endwith( )
例:姓名列开头姓王的
i = data['姓名'].str.startswith('王') #注意加上str.
print(data[i])
文本筛选:包含
格式:str.contains() 是否包含查找的字符串
例1:筛选地址包含信阳市
i = data['地址'].str.contains('信阳市')
print(data[i])
例2:筛选地址包含A-C座(不区分大小写)
i = data['地址'].str.contains('[a-c]座',case=False) #case=False 是不区分大小写
print(data[i])
或者
i = data['地址'].str.contains('[a-cA-C]座')
print(data[i])
筛选值范围
例1:语文分数在60至100之间的女性
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',sheet_name='Sheet1')
i = '性别 == "女" and 60<=语文<=100'
print(data.query(i))
筛选日期
获取某年某月数据
1.将出生日期列设置成索引
2.将出生日期列转成日期格式
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='出生日期',parse_dates=['出生日期']) #将出生日期列设置成索引 将出生日期列转成日期格式
print(data['1989'].head())
print(data['1983-10'].head())
获取某个时期之前或之后的数据
1.将出生日期列设置成索引
2.将出生日期列转成日期格式
3.将出生日期进行排序
import pandas as pd
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='出生日期',parse_dates=['出生日期']) #将出生日期列设置成索引 将出生日期列转成日期格式
data2=data.sort_values('出生日期') #将出生日期进行排序
print(data2)
获取1980年以后的数据
print(数据2.truncate(before='1980').head())
获取1990-12之前的数据
print(数据2.truncate(after='1990-12').head())
获取1990-02年以后的数据
print(数据2.truncate(before='1990-02').head())
获取1984-01-01年以后的数据
print(数据2.truncate(before='1984-01-1').head())
获取指定时间区间
print(数据2['1983':'1990'])
print(数据2['1983-01-1':'1990-12-31'])
多条件日期范围
1.不要将出生日期列设置成索引
2.将出生日期列转成日期格式
import pandas as pd
import datetime as dt
path = 'C:/Users/Administrator/Desktop/playground2/筛选.xlsx'
data = pd.read_excel(path,index_col='序号',parse_dates=['出生日期']) # 将出生日期列转成日期格式
i = ('@data.出生日期.dt.year>1980 and'
'@data.出生日期.dt.year<1990'
'and 性别=="男"')
# @data.出生日期相当于一个语法糖,dt.year取出生日期的年份,同类型的条件and写在上一个条件的末端,否则写在条件前端
print(data.query(i))
标签:某某,入门,pd,path,print,出生日期,筛选,data,pandas 来源: https://blog.csdn.net/weixin_51758140/article/details/113406785