ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

入门pandas—筛选

2021-01-29 23:05:09  阅读:265  来源: 互联网

标签:某某 入门 pd path print 出生日期 筛选 data 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有