numpy、pandas学习二
#numpy中arrary与pandas中series、DataFrame区别
#arrary生成数组,无索引、列名;series有索引,且仅能创建一维数组;DataFrame有索引、列名
import numpy as np
import pandas as pd
#numpy基本用法
print(np.array([1,2,3,"a"])) #创建并打印一维数组
#a=np.array([1,2,3,"a"])
#print(a.shape,a.size) #a.shape打印数组的行数、列数,a.size打印数组的元素个数
print(np.array([[1,2,3],[4,5,6],[7,8,9]])) #创建并打印二维数组
print(np.array([x for x in range(1,10)],dtype=np.int32)) #dtype用于设置元素类型
print(np.array([x for x in range(1,10)]).reshape((3,3))) #reshape用于设置矩阵的行列数
print(np.arange(10,20,2)) #创建10至20的步长为2的序列
print(np.arange(12).reshape((3,4))) #创建从0-12(不包含12)的三行四列的矩阵
#b=np.arange(10,20,2)
#print(b<15) #返回[ True True True False False]
'''
np.linspace(1,10,20)) #将1-10平均分为20个数字,并生成序列
np.linspace(1,10,8).reshape((2,4)))
np.zeros((3,4)) #生成三行四列的0矩阵
np.ones((3,4),dtype=np.int32) #生成三行四列的元素均为1的矩阵
np.empty((3,4))
'''
#numpy中矩阵乘法
a1=np.arange(12).reshape((3,4))
print(a1*2) #a1中每个元素都乘以2
print(a1**2) #a1中每个元素都进行平方
b1=np.arange(4)
print(a1*b1) #用b1去分别乘a1的每一行
#真正的矩阵乘法
a2=np.arange(4).reshape(2,2)
b2=np.array([[1,0],[0,1]])
np.dot(a2,b2) #两个矩阵相乘
a2.dot(b2) #两个矩阵相乘的另一种表达方式
'''
np.sum(a2)
np.max(a2)
np.sum(a2,axis=1) #按行求和,若=0,则为按’列数求和;sum、min、mean用法相同
np.argmin(a2) #返回最小值的索引,0
np.argmax(a2) #返回最大值的索引,3
np.diff((a2)) #矩阵中每两个元素的差(按行)
'''
A=np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.sort(A)) #按行进行升序排列每行元素
print(np.transpose(A)) #矩阵转置
print((A.T).dot(A))
print(np.clip(A,5,9)) #矩阵中所有小于5的数都改为5,所有大于9的数都改为9
A[2] #第二行的所有数
A[2][1]
A[2,1]
A[2,:] #第二行的所有数
A[:,1] #第一列的所有数
A[1,1:2] #第一行的第1-2元素
A.flatten() #将矩阵抹平为一个序列
for item in A.flat: #A.flat为一个迭代器
print(item)
#合并
a3=np.array([1,1,2])
b3=np.array([2,2,3])
print(np.vstack((a3,b3))) #上下合并两个矩阵
print(np.hstack((a3,b3))) #左右合并,
print(a3.T.shape) #返回(3,),a3.T不能实现把横向的数列转化为列数列
print(a3[np.newaxis,:].shape) #返回(1,3)
a3=a3[:,np.newaxis] #=np.array([1,1,2])[:,np.newaxis]
b3=b3[:,np.newaxis] #=np.array([2,2,3])[:,np.newaxis]
print(np.hstack((a3,b3)))
print(np.concatenate((a3,b3,a3,b3),axis=1)) #左右合并,若axis=0则为上下合并
#分割
a4=np.arange(12).reshape((3,4))
print(np.split(a4,2,axis=1)) #split(数据,分为几部分,按什么方向分),按列分为2部分
print(np.split(a4,3,axis=0)) #按行分为3部分
print(np.array_split(a4,3,axis=1)) #不等分分割
print(np.vsplit(a4,3)) #上下分割
print(np.hsplit(a4,2)) #左右分割
#pandas基本用法
m = pd.Series([1,2,3,4])
indexs = pd.date_range('20180101',periods=6)
print(indexs)
print(pd.DataFrame(np.random.randn(6,4),index=indexs,columns=['a','b','c','d']))
print(pd.DataFrame(np.arange(12).reshape((3,4))))
print(pd.DataFrame({"2018001":"zhang san","2018002":"li si","2018003":list(["wanger","sangsi","wangwu"])})) #用字典来创建DataFrame,其中"2018001"等为列名
m1=pd.DataFrame({"2018001":"zhang san","2018002":"li si","2018003":list(["wanger","sangsi","wangwu"])})
#m1.dtypes m1.columns m1.describe()
m1.sort_index(axis=1,ascending=False) #axis=1表示对column排序,axis=0表示对index排序;ascending=False表示倒序,为True时表示正序
m1.sort_values(by="2018001") #对2018001这一列排序
df=pd.DataFrame(np.arange(24).reshape((6,4)),index=indexs,columns=['a','b','c','d'])
print(df['a'],df.a) #两个输出结果相同,均是输出a列的值
print(df[0:3],df['20180102':'20180104']) #0-3index的数据,两个输出结果相同
#按行列标签筛选
print(df.loc['20180102']) #输出20180102行
print(df.loc[:,['a','b']]) #输出a,b两列
print(df.loc['20180102',['a','b']]) #输出'20180102'这一行的a,b两列数据
#按行列数范围筛选
print(df.iloc[3,1]) #输出第三行、第一列的数据
print(df.iloc[3:5,1:3]) #输出第三行到第五行,第一列到第三列对应的数据
print(df.iloc[[1,3,5],1:3]) #输出第一、三、五行,第一列到第三列对应的数据
#行列标签、行列数混合筛选
print(df.ix[:3,['a','c']]) #输出前三行,a、c列对应的数据
#筛选包括扩展区域的数据
print(df[df.a>8]) #筛选a列中大于8的所有列的值
print(df.a[df.a>4]) #筛选a列种大于4的所有a列的值
print(df.b[df.a>4])
#df['f']=np.nan #增加f列并赋空值non
#df['e']=pd.Series([1,2,3,4,45,6],index=pd.date_range('20180101',periods=6))
df.iloc[0,1]=np.nan
df.iloc[1,2]=np.nan
print(df)
print(df.dropna(axis=0,how='any')) #删除存在空值的行,若how='all'则是删除全为空值的某行(即那一行均为空值);axis=1时同理
print(df.fillna(value=0)) #将空值部分填充为0
df.isnull() #找出空值部分
np.any(df.isnull()==True) #检查数据中是否存在空值,存在则返回True
#data=pd.read_csv('文件名.csv') #pandas导入文件
#data.to_pickle('文件名.pickle') #pandas保存文件
#concat
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3=pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
print(pd.concat([df1,df2,df3],axis=0,ignore_index=True)) #将df1,df2,df3上下合并,并重新排序索引
#join,[inner,outer]
df4=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
df5=pd.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index=[2,3,4])
pd.concat([df4,df5]) #df4,df5相互没有列的数据以non填充
pd.concat([df4,df5],join='inner') #相同列部分保留合并,join='outer'时,为默认格式,与pd.concat([df4,df5])相同
pd.concat([df4,df5],join='inner',ignore_index=True)
pd.concat([df4,df5],axis=1) #相当于sql的全连接
pd.concat([df4,df5],axis=1,join_axes=[df4.index]) #相当于sql的左连接
df4.append(df5,ignore_index=True)
df4.append([df5,df5],ignore_index=True)
s1=pd.Series([1,2,3,4],index=['a','b','c','d'])
print(df4.append(s1,ignore_index=True))
# merging two df by key/keys. (may be used in database),按关键列合并,该列不一定在数据的哪一边,因为此次举例均采用字典形式
# simple example
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'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print(right)
res = pd.merge(left, right, on='key') #安装key进行合并
print(res)
# consider two keys
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print(right)
res = pd.merge(left, right, on=['key1', 'key2'], how='inner') # default for how='inner',key1、key2相同的,行数据合并
# how = ['left', 'right', 'outer', 'inner'] #outer时,按照key1、key2直接合并所有数据,包括left和right不同的key1、key2
res = pd.merge(left, right, on=['key1', 'key2'], how='left') #相当于左连接
print(res)
# indicator
df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a','b']})
df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]})
print(df1)
print(df2)
res = pd.merge(df1, df2, on='col1', how='outer', indicator=True) #增加一列_merge用来显示merge情况
# give the indicator a custom name
res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column') #增加一列indicator_column用来显示merge情况(如left_only)
# merged by index
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2']},index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],'D': ['D0', 'D2', 'D3']},index=['K0', 'K2', 'K3'])
print(left)
print(right)
# left_index and right_index,left_index默认为nan,这里将其改为用index合并
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
res = pd.merge(left, right, left_index=True, right_index=True, how='inner')
# handle overlapping,suffixes添加后缀
boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})
girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]})
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner') #区别k相同,对应不同数据的归属(age_boy、age_girl)
print(res)
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='outer')
# join function in pandas is similar with merge. If know merge, you will understand join
#pandas plot
import matplotlib.pyplot as plt
# plot data
# Series
data = pd.Series(np.random.randn(1000), index=np.arange(1000))
data = data.cumsum()
##data.plot()
# DataFrame
data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))
data = data.cumsum()
# plot methods:
# 'bar', 'hist', 'box', 'kde', 'area', scatter', hexbin', 'pie'
ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label="Class 1") #scatter只能有两个属性
data.plot.scatter(x='A', y='C', color='LightGreen', label='Class 2', ax=ax) #ax=ax将此图与ax图打印到一张图中
plt.show()
numpy、pandas学习二的更多相关文章
- numpy pandas 学习
一. 数组要比列表效率高很多 numpy高效的处理数据,提供数组的支持,python默认没有数组.pandas.scipy.matplotlib都依赖numpy. pandas主要用于数据挖掘,探索, ...
- Python: NumPy, Pandas学习资料
NumPy 学习资料 书籍 NumPy Cookbook_[Idris2012] NumPy Beginner's Guide,3rd_[Idris2015] Python数据分析基础教程:NumPy ...
- Pandas学习(二)——双色球开奖数据分析
学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学习(四)–数据的归一化 pandas学习(五)–pa ...
- 【转】Pandas学习笔记(二)选择数据
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 常用统计分析python包开源学习代码 numpy pandas matplotlib
常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis
- Python数据分析之pandas学习
Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...
- Ipython自动导入Numpy,pandas等模块
一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...
- Numpy&Pandas
Numpy & Pandas 简介 此篇笔记参考来源为<莫烦Python> 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, ...
- python 数据分析工具之 numpy pandas matplotlib
作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...
随机推荐
- springboot 中yml配置
springboot 中各种配置项纪录 1. @Value 最早获取配置文件中的配置的时候,使用的就是这个注解,SpEL表达式语言. // 使用起来很简单 @Value("${config. ...
- 记一次jedis并发使用问题JedisException: Could not return the resource to the pool
今天线上突然发现个奇怪的问题项目第一次启动的时候redis报错JedisException: Could not return the resource to the pool 直接访问接口的时候不报 ...
- react项目中登陆注册验证码的倒计时,页面刷新不会重置
目前很多的网站和app在做登陆注册时都会用到手机验证码,为了防止验证码轰炸,也就是随意的点击验证码,一般我们需要对获取验证码进行一些限制,最常用到的是在规定时间内不得重复发送. 实现倒计时很简单,可以 ...
- git pull 和git fetch的区别
git pull 是上下文环境敏感的,它会把所有的提交自动给你合并到当前分支当中,没有复查的过程 而git fetch只是把拉去的提交存储到本地仓库中,真正合并到主分支中需要使用merage head ...
- Java学习日报7.20
//7.20 三个和尚比身高import java.util.Scanner; //导包public class Hello{ public static void main(String[] arg ...
- android基本组件 Button
android中提供了普通按钮Buttton和图片按钮ImageButton两种按钮组件,ImageButton按钮中主要有一个android:src属性,用于设置按钮的背景图片.可以在Button的 ...
- RMI之由浅入深(一)
0x01.什么是RMI RMI(Remote Method Invocation)即Java远程方法调用,RMI用于构建分布式应用程序,RMI实现了Java程序之间跨JVM的远程通信.顾名思义,远程方 ...
- mysql高并发解决方案
mysql高并发的解决方法有: 优化SQL语句,优化数据库字段,加缓存,分区表,读写分离以及垂直拆分,解耦模块,水平切分等. 高并发大多的瓶颈在后台,在存储mysql的正常的优化方案如下: (1)代码 ...
- zabbix客户端安装配置
1.下载,解压并安装zabbixtar zxvf zabbix-2.0.12.tar.gzcd zabbix-2.0.12./configure --prefix=/usr/local/zabbix ...
- 安装Tomcat 9
文章目录 访问Tomcat官网 选择下载所需的软件包 安装Tomcat 测试安装 访问Tomcat官网 Tomcat官方的下载地址为:https://tomcat.apache.org/downloa ...