python pandas包,Python的常用包pandas,numpy

Pandas

1.DataFrame 和 Series 的介绍import pandas as pd    #导入pandas 包

array = [[1,2,3],[3,4,5]]   #创建列表

df = pd.DataFrame(array)dict = {'name':['datafrog','data','frog'],'age':[18,19,18]}  #创建字典

df = pd.DataFrame(dict)s2 = pd.Series([2,3,4,5],index=['a','b','c','d'])   #创建列表s3 = pd.Series({'a':1,'b':2})  #创建字典s2.to_frame() #列表与字典的转换s2.to_frame().T #转至

2.DataFrame 的常用属性

index  行索引

columns 列索引df.set_index('b') #引用b列做索引

info() 数据预览 用于查找空缺值

describe() 查看数据的各项指标,最大值、最小值、平均值、四分位置。用于查看异常值

head() 前五行

tail() 后五行

3.读写文件filepath = 'stocks.csv'

pd.read_csv(filepath, header = 0)pd.read_csv(filepath, skiprows=lambda x : x%2 == 0)  #在读取中做一些计算

4.索引,切片

四种索引形式:# 直接索引,获取第2 行

df.loc[2]# 2.列表索引,列表可以是arange,range,ndarray ,series 都可以,列表形式即可

# 获取0,1,2 行

df.loc[[0,1,2]]# 3.切片索引

df.loc[0:4]# 4.bool类型索引

b1 = df['年龄']>30

iloc 和 loc 的区别

loc 是基于索引值的,切片是左闭右闭的

iloc 是基于位置的,切片是左闭右开的df.loc[0:2]   #选取0-2的数据df.iloc[2]  #选取第二行数据df1 = df.set_index('用户ID')  #用户ID 替代索引df[['年龄','城市']].head()  #按列名切片# 修改列索引

df.columns=['name','age','sex','height']# 使用 rename 函数进行修改列索引

df.rename(columns={'姓名':'name', '年龄':'age', '性别':'sex','身高':'height'},inplace=True)# 替换一个值

df.replace({'name':{'小明':'xiaoming'}},inplace=True)# 对数据进行排序

df.sort_values('age')

5.增删改查# 累加求和

df.cumsum(0)# 增加一列

df['player'] = 1

df# 删除一列

del df['player']

df# 删除行,labels 是行列的名字,默认axis=0删除行,为1则删除列

df.drop(labels=0)# 修改一列的值,使用 map 函数

df.sex = df['sex'].map({'男':'female','女':'male'})# 还可以使用 replace 函数进行替换

df.sex.replace('female','男',inplace=True)

df.sex.replace('male','女',inplace=True)# 矩阵间得运算

# a.相同维度得矩阵加减乘除就是对应元素进行操作

df1=pd.DataFrame(np.random.random((5,10)),columns=list('abcdefghij'))

df2=pd.DataFrame(np.random.random((5,10)),columns=list('abcdefghij'))

df1*df2

6.Pandas 和 sql

数据拼接left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],

'A': ['A0', 'A1', 'A2', 'A3'],

'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],

'A': ['C0', 'C1', 'C2', 'C3'],

'B': ['D0', 'D1', 'D2', 'D3']})

# 简单的拼接

pd.concat([left,right])

pd.concat([left,right],ignore_index=True) #改变原始数据

关联操作# 指定列进行关联,默认是 inner join

result = pd.merge(left,right,on='key')

result# 如果有多个关联条件

result = pd.merge(left, right, on=['key1', 'key2'])

result# 通过指定 how 来确定关联方式

#左连接

result = pd.merge(left, right, how='left', on=['key1', 'key2'])

#右连接

result = pd.merge(left, right, how='right', on=['key1', 'key2'])

#外连接

result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

result# 列名不一样怎么关联

pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])# 通过索引来关联

left.set_index('key1',inplace=True)

right.set_index('key3',inplace=True)

分组计算df.district.unique()  #查看所有单独值

df.district.value_counts().head() #分组计算# 假设我们想知道每一个地区的客户数量

groups = df.groupby('district')

type(groups)# groupby 对象的方法

groups.size()groups.groups# 作用多个聚合函数

groups.agg([np.mean,np.sum,np.std])# 针对具体列聚合

groups.age.agg([np.mean,np.sum,np.std])# 不同列不同聚合函数

groups.agg({"age":np.mean,"novip_buy_times":np.sum})

转换过滤# 对数据进行操作,一般数据量不变

s_score = lambda s : (s-s.mean())/s.std()

groups = df.groupby("district")

groups[['age','novip_buy_times','novip_buy_moneys']].transform(s_score)df['vip_buy_times_percent'] = df['vip_buy_times']/groups['vip_buy_times'].transform('sum') #增加变量# 分组过滤

df2 = groups.filter(lambda g : g['vip_buy_moneys'].mean() >= 2000)

df2.district.value_counts()

pandas 连接 mysqlimport pandas as pd

import sqlalchemy

sql='select * from stu'

engine = sqlalchemy.create_engine('mysql+pymysql://root:mysql@localhost:3306/data')

df = pd.read_sql(sql,engine)# 写入数据到 mysql

# 还有参数if_exists,表示有则插入

df1.to_sql('stu',engine,index=False,if_exists='append')

Numpy

1.numpy 的介绍和数据类型import numpy as np

vector = np.array([5, 10, 15, 20])# 构造一个 ndarray

matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])

matrix

# 注意 ndarray 的值类型都是统一的# 填充指定值

np.full([3,4],1)# 填充0值

np.zeros ((3,4))# 使用 arange 生成序列

# 起始为10,5为步长,30为结尾取不到

np.arange( 10, 30, 5 )#随机矩阵: random.random 后面的 (2,3) 表示要得到一个2行3列的矩阵,默认会产生 -1 到 +1 的随机值。

np.random.random((2,3))# 平均划分

from numpy import pi

np.linspace( 0, 2*pi, 100 )

2.numpy 的切片和索引# 使用切片

data[0:3,[0,1]]  #0到2行0到1个数字# bool 索引

vector == 10# 多个条件判断

res = (vector == 10) | (vector == 20)

res

3.转换,运算# 类型及转换

vector.dtype

vector.astype('float')# 所有元素求和

vector.sum()# 求指数

np.exp(matrix)# 开方

np.sqrt(matrix)# 多维变一维

matrix.ravel()# 矩阵的扩展

a = np.arange(0, 40, 10)

b = np.tile(a, (3, 5))    # 行变成3倍,列变成5倍# 矩阵的拼接:

a = np.floor(10*np.random.random((2,2)))

b = np.floor(10*np.random.random((2,2)))

# 水平拼接

np.hstack((a,b))

# 竖直拼接

np.vstack((a,b))

# 竖直分割

np.hsplit(a,3)

# 水平分割

np.vsplit(a,3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值