#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学习二的更多相关文章

  1. numpy pandas 学习

    一. 数组要比列表效率高很多 numpy高效的处理数据,提供数组的支持,python默认没有数组.pandas.scipy.matplotlib都依赖numpy. pandas主要用于数据挖掘,探索, ...

  2. Python: NumPy, Pandas学习资料

    NumPy 学习资料 书籍 NumPy Cookbook_[Idris2012] NumPy Beginner's Guide,3rd_[Idris2015] Python数据分析基础教程:NumPy ...

  3. Pandas学习(二)——双色球开奖数据分析

    学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学习(四)–数据的归一化 pandas学习(五)–pa ...

  4. 【转】Pandas学习笔记(二)选择数据

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  5. 常用统计分析python包开源学习代码 numpy pandas matplotlib

    常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis

  6. Python数据分析之pandas学习

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  7. Ipython自动导入Numpy,pandas等模块

    一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...

  8. Numpy&Pandas

    Numpy & Pandas 简介 此篇笔记参考来源为<莫烦Python> 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, ...

  9. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

随机推荐

  1. 为什么MySQL不推荐使用uuid作为主键?

    前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么 ...

  2. element-ui 表单 v-if 不能验证问题

    element-ui 表单v-if 很多人会遇到无法验证的问题,网上很多是在el-form-item标签前加一个div然后把v-if拿到div上去像这样 <div v-if="addc ...

  3. pyspark使用-dataframe操作

    一.读取csv文件 1.用pandas读取 import pandas as pd from pyspark.sql import SparkSession spark=SparkSession.bu ...

  4. SSRF之利用dict和gopher吊打Redis

    SSRF之利用dict和gopher吊打Redis 写在前面 SSRF打Redis也是老生常谈的东西了,这里复现学习一下之前在xz看到某师傅写的关于SSRF利用dict和gopher打内网服务的文章, ...

  5. web页面过一段时间再次访问时显示数据库连接错误

    这个问题是我之前遇到的,过了很久才想着去解决它,因为这也没多大影响,无非就是再访问一次的问题,后来有一次观察网站的运行情况时,发现这个问题还挺严重,如果一直用,就不会出现问题,如果中间歇一会,再用就会 ...

  6. eclipse中把spring源码关联至当前工程

    1.下载并导入spring的相关jar包下载对应版本的spring 2.在当前工程中,选择Referenced Libraries,展开后,选择相应的jar包,右击并选择Properties 3. 在 ...

  7. ORACLE的还原表空间UNDO写满磁盘空间,解决该问题的具体步骤

    产生问题的原因主要以下两点:1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况:2. 有较大事务没有收缩或者没有提交所导制:说明:本问题在ORACLE系统管理中属于比较正 ...

  8. 【JavaWeb】jQuery 基础

    jQuery 基础 介绍 顾名思义,它是 JavaScript 和 查询,是辅助 JavaScript 开发的类库. 它的核心思想是 write less, do more. 所以它实现了很多浏览器的 ...

  9. 【Redis3.0.x】NoSql 入门

    Redis3.0.x NoSql 入门 概述 NoSQL(Not Only SQL ),即不仅仅是 SQL,泛指非关系型的数据库.NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑 ...

  10. 【Flutter】容器类组件之剪裁

    前言 Flutter中提供了一些剪裁函数,用于对组件进行剪裁. 剪裁Widget 作用 ClipOval 子组件为正方形时剪裁为内贴圆形,为矩形时,剪裁为内贴椭圆 ClipRRect 将子组件剪裁为圆 ...