4pandas读取数据查询数据
1什么是pandas:
答:pandas是一个开源的python类库,用于数据分析数据出和数据可视化
2如何安装pandas:
pip install pandas
3pandas数据读取csv文件:
import pandas as pd fpath = r'E:/test/resultcsv.csv' #读取csv文件 ratings = pd.read_csv(fpath) #查看前几行数据 print(ratings.head()) #查看数据的形状,返回行数和列数 print(ratings.shape) #查看列名列表 print(ratings.columns) #查看索引列 print(ratings.index) #查看每列的数据类型 print(ratings.dtypes)
4读取mysql文件:
import pandas as pd import pymysql conn = pymysql.connect( host='127.0.0.1', user='root', password='123456', database='wl2020v2', charset='utf8mb4' ) mysql_page = pd.read_sql("select * from exp_order where create_time between '2021-11-03 09:20:00' AND '2021-11-03 10:30:00'",con=conn) print(mysql_page)
5pandas两大数据结构对象dataframe和series的关系:
一列或者一行数据就是一个series,由2个以上series组成的数据就是一个dataframe,而series+dataframe=pandas
练习:
1)把字典转换成dataframe对象:
import pandas as pd dit = { '运单编号':['550019093732123','550019093732456','550019093732789'], '发件人姓名':['张三','李四','王五'], '账单金额':[6.4,6.4,8] } df = pd.DataFrame(dit)
2)查询数据:
#查询列: #查询一列数据 print(df['运单编号']) #查询多列数据 print(df[['运单编号','账单金额']]) #查询行 #查询第一行数据 print(df.loc[1]) #查询多行数据 print(df.loc[1:3])
3)可通过type查看数据类型:
print(type(df.loc[1:3])) <class 'pandas.core.frame.DataFrame'> print(type(df.loc[1])) <class 'pandas.core.series.Series'>
6pandas使用df.loc查询数据的五种方法:
1使用单个label值查询数据
#查询运单编号550019027113305的账单金额:
import pandas as pd df = pd.read_csv(r'E:/test/resultcsv.csv') #把运单号设为索引方便按快递单号查询 df.set_index('运单编号',inplace=True) #查询运单编号550019027113305的账单金额: print(df.loc['550019087312343','账单金额']) #查询运单编号550019027113305的发件人姓名和发件人电话 print(df.loc['550019087312343',['发件人姓名','发件人电话']])
2使用值列表批量查询
#查询三个快递单号的发件人电话
import pandas as pd df = pd.read_csv(r'E:/test/resultcsv.csv') #把运单号设为索引方便按快递单号查询 df.set_index('运单编号',inplace=True) ##查询三个快递单号的发件人电话 print(df.loc[['550019021234167','550011234113305','550123421554844'],'发件人电话']) ##查询三个快递单号的发件人姓名和发件人电话 print(df.loc[['550123426415167','550123427113305','550019012344844'],['发件人姓名','发件人电话']])
3使用数值区间进行范围查询
import pandas as pd df = pd.read_csv(r'E:/test/resultcsv.csv') #行和列都按区间查询 print(df.loc['1':'15','发件人姓名':'发件人电话']) #按行区间查询 #我要查询索引0-2000行内的所有运单编号 print(df.loc['0':'2000','运单编号']) #按列区间查询 #查询运单编号550019026415167的发件人姓名和发件人电话 df.set_index('运单编号',inplace=True) print(df.loc['550019012345167','发件人姓名':'发件人电话'])
4使用条件表达式查询
import pandas as pd df = pd.read_csv(r'E:/test/resultcsv.csv') ##查询账单金额大于10的数据 print(df.loc[df['账单金额'] > 10, :]) #查询账单金额最高小于等于45,并且最低大于17,并且重量大于1,并且保价为0的数据 #后面的冒号表示查询所有的列 a = df.loc[(df['账单金额']<=45) & (df['账单金额']>=17) & (df['重量']>1) & (df['保价']==0), :] print(a)
5调用函数查询
import pandas as pd df = pd.read_csv(r'E:/test/resultcsv.csv') #直接写lambda表达式 b = df.loc[lambda df : (df['账单金额']<=45) & (df['账单金额']>=17) & (df['重量']>1) & (df['保价']==0), :] print(b)
#自己定义函数 import pandas as pd df = pd.read_csv(r'E:/test/resultcsv.csv') def query_my_data(df): return (df['账单金额']<=45) & (df['账单金额']>=17) & (df['重量']>1) & (df['保价']==0) a = df.loc[query_my_data, :] print(a)

浙公网安备 33010602011771号