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库 为了 ...
随机推荐
- CommandLineRunner和ApplicationRunner
使用场景 我们在开发过程中会有这样的场景:需要在容器启动的时候执行一些内容,比如:读取配置文件信息,数据库连接,删除临时文件,清除缓存信息,在Spring框架下是通过ApplicationListen ...
- Intellij IDEA设置
代码格式化/保存时自动格式 搜索google-java-format 和 Save Actions,安装 保存时候// 自动空格 自动导包 自动换行
- Markdown高级使用之流程图
流程图在Markdown中的的表现形式就是代码块,代码块语言标记为mermaid.主要内容大体分为:方向.节点.节点间的连接关系,下面就围绕这三个点来整理. mermaid支持流程图.甘特图和时序图, ...
- JS 字符串比较"=="与"==="区别
最近课程油js的课程,课后习题有道关于下面 1 类似的一道题,叫比较然后判断结果,最开始看了网上的知识点,还是有点不太懂,个人感觉模模糊糊的(当然我自己菜,是正常的),就用依稀还记得的java对象与引 ...
- 「珍贵历史资料鉴赏」CF786B 题解
写在前面 偶然翻到一篇 2019-08-07 18:58 写的未发布的题解. 给大家找点乐子玩. 正文 知识点:线段树优化建图 线段树优化建图 用于解决 类似 从 x 向区间[L,R]的 区间连边问题 ...
- shellSyntax.md
shell #! /bin/bash 头文件 echo -e 若字符串出现特殊字符,则特别处理 -n 不要在最后自动换行 ./filename.sh sh filename.sh r ...
- chatsRoom Design Report
基于TCP实现聊天室 主要使用四个类 ChatClient类 使用BufferedReader 得到输入流,使用OutputStream得到输出流 实现读取服务器广播的消息和发送消息到 ...
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 详解)--学习笔记
2.6.7 RabbitMQ -- Masstransit 详解 Consumer 消费者 Producer 生产者 Request-Response 请求-响应 Consumer 消费者 在 Mas ...
- Token验证的流程及如何准确的判断一个数据的类型
Token验证的流程: 1,客户端使用用户名跟密码请求登录:2,服务端收到请求,去验证用户名与密码:3,验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端:4,客户端收到 T ...
- 【Flutter】容器类组件之剪裁
前言 Flutter中提供了一些剪裁函数,用于对组件进行剪裁. 剪裁Widget 作用 ClipOval 子组件为正方形时剪裁为内贴圆形,为矩形时,剪裁为内贴椭圆 ClipRRect 将子组件剪裁为圆 ...