数学科学模块--Pandas

pandas 安装

安装命令

pip install pandas

pandas 基础操作

## 导入pandas 
import pandas as pd
## 检查版本号
pd.__version__
##运行结果
'1.17.2'

pandas Series 一维数组

创建Series对象

ser=pd.Series(['张三','李四','王五'])
## 修改索引
ser=pd.Series(['张三','李四','王五'],list(range(1,4)))

Series与NumPy的关系

在serise内部 数据就是以numpy的形式来存储的

ser=pd.Series(['张三','李四','王五'],list(range(1,4)))
##获取ser的值
ser[2]
## 结果:'李四'
## 修改ser的值
ser[2]='ved'
## 获取ser的值
ser.values
## 获取ser值的类型
type(ser.values)
##结果:numpy.ndarray
##定义pandas的下标
ser2=pd.Series([17,18,19],list(range(1,4)))
##对每个元素进行加1
ser2+1
#获取ser2中的偶数
res=ser2[ser2%2==0]
##输出结果res=18
#定义字典,再将字典加入到pandas的series中
data={
     'beijing':10000,'shanghai':29999,'guangzhou':300000}
ser3=pd.Series(data)
#pandas中的索引并不一定要是整数类型
ser3['beijing']
#判断key值是否是在在序列中
'beijing' in ser3
##返回结果True
#将pandas数组转换成字典
ser3.to_dict()
#转换成列表list
ser3.to_list()
#转换成json
ser3.to_json()
#转换成frame
ser3.to_frame()

DataFrame 二维数组

DataFrame创建

import pandas as pd
import numpy as np
##定义一个100到108的二维数组,3行N列的数组
data=np.arange(100,109).reshape(3,-1)
##结果: #array([[100, 101, 102],
       #[103, 104, 105],
       #[106, 107, 108]])
#将data转换成DataFrame
df=pd.DataFrame(data)

#
data={
     
    'name':['jack','mary','lily'],
    'age':[20,19,18],
    'height':[1.89,1.76,1.65]
}
df=pd.DataFrame(data)
#获取列名
df.columns
#修改列名
df.columns=['username','age','height']
#将列名增加一列
df.columns=['username,'age','height','email']
#获取索引
df.index
#修改index
df=pd.DataFrame(data,columns=['name','age','height','email'],index=range(1,4))

pandas中数据的选取操作

#测试数据
data={
     
    'name':['张三','李四','王五'],
    'age':[19,20,30],
    'height':[1.89,1.75,1.65]
}
df=pd.DataFrame(data)
#获取name
df.name
#获取年龄
df.age
#获取多条数据
df[['age','height']]
#修改对象,先对对象进行copy()
names=df.name.copy()

pandas切片

#获取列
df.columns
#根据切片获取得到age,height的数据
df.columns[1:3]  #列名
df[df.columns[1:3]] #数据
#增加一列,并获取得到每一列数据的年份
import datetime
df['year']=datetime.datetime.now()-df.age
#输出结果:
#	name	age	height	year
#	0	张三	19	1.89	2001
#	1	李四	20	1.75	2000
#	2	王五	30	1.65	1990

#删除一列,axis=1 根据列删除
df.drop('year',axis=1)
#也可以删除多列
df.drop(['year','age'],axis=1)
#根据切片删除
df.drop(df.colums[1,3],axis=1)
#根据索引获取值
df.loc[[1]]
#在最后一行插入数据
df.loc[df.shape[0]]={
     'name':'杨样','age':23,'height':180,'year':0}
#删除所有为2的数据
df2=df.drop(2)
#对删除后数据的索引重新排序
df2.index=range(df2.shape[0])
#物理索引
df2.iloc[[2]]
#切片
df2.iloc[1:3]
#修改索引
df2.index=list('ABC')
#也可以通过坐标的方式求值 ,求李四的年龄
df2.iat[1,1]
#修改年龄
df2.iat[1,1]=30

pandas使用比较运算符

#求出身高大于1.80的数据
df2[df2.height >=1.80]
# 也可以加入多个条件
df2[(df2.height >=1.80) & (df2.age>=20)]
#也可以使用条件语句
df2.query('height >=1.65 and age >=20 or name=="杨样"')
#另一种方式查询
age=20
df2.query('age <@age')
#查询年龄在18或者19的值
df2[df2['age'].isin([18,19])]
#数据反转及将行索引转换成列索引
df2.T

pandas导入数据

#导入txt
pd.read_table('./pandas导入数据/01.txt')
#以冒号分割并去掉header
pd.read_table('./pandas导入数据/03.txt',sep =":",header=None)
#去掉header并修改列索引
pd.read_table('./pandas导入数据/03.txt',sep =":",header=None,names=['name','pwd','uid','pid','local','home','shell'])
#导入cvs
pd.read_csv('./pandas导入数据/04.csv')
#导入excle
#需要安装 pip install xlrd
pd.read_excle('./pandas导入数据/05.xlsx')
#导入html
#需要安装 pip install lxml
tables=pd.read_html('./pandas导入数据/06.html',header=0)
#导入mysql
import pymysql
con=pymysql.connect(host='localhost',user='root',password='123456',database='zhaobiao',charset='utf8',use_unicode=True)
sql_cmd='select * from t_zhaobiao'
df=pd.read_sql(sql_cmd,con)
#查看前2行数据
df.head(2)

sort 排序

st=pd.Series(list('CAD'),index=[3,1,2])
#根据索引进行排序
st.sort_index() 
#根据值进行排序
st.sort_values()
#根据索引进行倒序排序
st.sort_index(ascending=False)
#根据值进行倒序排序
st.sort_values(ascending=False)

#测试数据
arr=[[9,3,8],
     [4,5,6],
     [8,7,4]]
df=pd.DataFrame(arr,index=[0,2,1],columns=list('abc'))
#根据索引进行排序,默认行
df.sort_index() 
#根据索引进行排序,根据行
df.sort_index(axis=1)
#对DataFrame中某一series进行排序
df.sort_values(by='c')
#对某一列进行倒序排序
df.sort_values(by='c',ascending=False)
#对多行进行排序
df.sort_values(by=['c','a'])
#pandas排行榜
df.rank()
#谁出现的位置靠前,谁的排名靠前
df.rank(method='first') 
#谁出现的位置靠前,谁的排名靠前
#求最大值
df.rank(method='max')
#求最小值
df.rank(method='min')

Pandas合并

merge 合并

import numpy as np
#定义df1
df1=pd.DataFrame(
    {
     
        'stu_no':['s1','s2','s1','s2','s3','s4','s3','s2'],
        'score':np.random.randint(50,100,size=8)
    }
)

#定义df2
df2=pd.DataFrame(
    {
     
        'stu_no':['s1','s2','s3','s5'],
        'name':['张三','李四','王五','周六']
    }
)

#使用merge合并两张表
#根据stu_no将2张表合并成一张表
##相当于内连接 inner
pd.merge(df1,df2,on='stu_no')
#left连接
pd.merge(df1,df2,how='left')
#右连接
pd.merge(df1,df2,how='right')
#外连接
pd.merge(df1,df2,how='outer')

Pandas concat

## 测试数据
#初始化1,4的数据2行3列
df1=pd.DataFrame(np.arange(1,5).reshape(2,-1))
#初始化2行2列,初始值为0
df2=pd.DataFrame(np.zeros((2,2)))
#默认行连接
pd.concat([df1,df2])
#根据列连接
pd.concat([df1,df2],axis=1)
#异常值得分析
#测试数据
data =[[1,None],
       [4,5],
       [None,None],
       [8,9],
       [3,4],
      ]
df=pd.DataFrame(data,columns=['a','b'])
#取前2行
df.head(2)
#取后3列
df.tail(3)
#查询df的信息
df.info()

df.describe()

#count 个数
#mean 平均数
#std  标准差
#min 最小值
#25% 50% 75% 下四分位,中位数,上四分位
#max 最大值
df.count() #个数
df.mean() #平均数
df.sum() #求和
df.std() #标准差
df.var() #方差  方差开根号就是标准差

Pandas中聚合与分组

##加载数据
import pandas as pd
import numpy as np
#加载数据
df=pd.read_excel('./Pandas中的数据分组与透视表/data.xlsx')
#根据类别分组
grouped=df.groupby('类别')
#对数量和金额求和
grouped['数量','金额'].sum()
#求单价最贵的
grouped['单价'].max()
#求单价的平均值
grouped['单价'].mean()

datatime

import time
#获取当前时间戳
time.time()
#获取本地的时间
time.localtime(1582556037.494172) #转换成本地的时间
#转换成相应的时间格式
local=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1582556037.494172))
#得到一个日期的对象字符串
local =time.strptime('1987-08-22 16:53','%Y-%m-%d %H:%M')
#将local对象转换成时间戳
time.mktime(local)

datetime 它继承了time 主要用于对年,月,季度,周等时间的操作

from datetime import datetime
#获取当前的时间
now=datetime.now()
now.year #年
now.month #月
now.day #日
#将datetime转成成str
nowstr=now.strftime('%Y-%m-%d %H:%M:%S')
#将str日期转换成datetime
local=datetime.strptime('2020-2-3 23:03','%Y-%m-%d %H:%M')
#将时间戳对象转换成datetime
datetime.fromtimestamp(556620780)
#获取当前的时间戳
now.timestamp()
#计算2个时间中间的时间差
delta=datetime.now()-datetime(2019,3,23)
delta.day
delta.seconds

pandas时间序列

#初始化时间序列
pd.date_range('2018-3-12','2018-10-1')
#freq表示以什么进行初始化,D天,W周,M月,Q季度,B小时,T分,S秒
pd.date_range('2018-3-12','2018-10-1',freq='W')
##根据天求平均值
df.groupby(df.index.date).mean()  
#根据小时求平均值
df.groupby(df.index.hour).mean()
#根据周求平均值
df.groupby(df.index.week).mean()
df.resample('5T').mean()  #求每5分钟的平均值

你可能感兴趣的:(机器学习-推荐系统,python,数据分析)