天天看點

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)