python--Numpy and Pandas 基本语法
博客地址:http://www.cnblogs.com/yudanqu/
numpy和pandas是python进行数据分析的非常简洁方便的工具,话不多说,下面先简单介绍一些关于他们入门的一些知识。下面我尽量通过一些简单的代码来解释一下他们该怎么使用。以下内容并不是系统的知识体系,我只是尽可能把最基础的知识点列写一下。
一、numpy
1、array
1 import numpy
2 list_1 = [1,2,3,4]
3 array_1 = numpy.array(list_1) # 一维数组
4 list_2 = [4,5,6,7]
5 array_2 = numpy.array([list_1,list_2]) # 二维数组
array_2.shape # 查看数组特征,eg:2行4列
array_2.size # 查看元素个数, eg:8
array_2.dtype # 查看数组类型,eg:int64
注:numpy.arange(n) #与python中的range区别是前面有个a
numpy.zeros(s) # 全0矩阵,s可以为一个数也可以为一个列表,eg:[2,3]表示2*3的二维数组
numpy.eye(a) # 单位矩阵,生成的是浮点数
- 访问数组中元素:
一维:array_1[2] 、array_1[1:4]
二维:array_2[1][2] 、array_2[1,2] 、array_2[:1,1:4]
其中可以根据python中列表的切片来访问数据
2、数组与矩阵运算
~~数组array
numpy.random.randn(10) # 十个元素的一维数组
numpy.random.randint(10,size=20).reshape(4,5) # 产生20个10以内的随机整数,后面的reshape是将这些数重新写成一个4*5的二维数组
- 数组之间维度相同可以直接进行加减乘除(除数不能为0)
- numpy.unique(array_1) # 找到里面所有的数但不重复
- sum:二维数组中对每一列求和 sum(array_2)
- sum(array_2[0) 对第一行求和
- sum(array_2[:,0] 对第一列求和
- array_2.max() #求最大值,对某行某列求则同sum
~~矩阵matric
numpy.mat([1,2,3],[4,5,6]) # 生成一个二维矩阵
numpy.mat(array_1) # 将数组转换成矩阵
注:矩阵之间维度相同可以直接进行加减运算,而乘除运算需要行和列交叉对应,参照线性代数中的知识。
3、input和output:
import numpy as np
f = open('x.pkl','wb')
#序列化到硬盘 #pickle
import pickle
pickle.dump(x,f) # 产生pkl文件
pickle.load(f) # 提取pkl文件 #numpy本身的工具
numpy.save('one_array',x)
numpy.load('one_array.npy')
numpy.savez('two_array.npz',a=x,b=y) # 对多个进行操作,进行压缩储存
c = numpy.load('two_array.npz') # 提取文件
c['a'] #第一个文件
c['b'] #第二个文件
二、pandas
1、Series
import numpy as np
import pandas as pd
#下面是创建Series的三种方法
#方法1:s1 = pd.Series([1,2,3,4])
#方法2:s2 = pd.Series(np.arange(10)) # 通过numpy.arange创建
#方法3:s3 = pd.Series({'1':1,'2':2,'3':3}) # 通过字典创建
s1.values # 查看值
s1.index # 查看索引
s4 = pa.Series([1,2,3,4],index=['A','B','C','D']) # 设置索引
s4.to_dict() # 转化成字典
pd.isnull(s4) #判断其中元素是否为NaN,pd.notnull()同理
2、DataFrame
from pandas import Series,DataFrame
#通过粘贴板导入dataframe
df = pd.read_clipboard() # 在此之前需要你copy一个表
df.columns # 输出列名
df.'列名' # 输出列的数值(是一个Series)
df_new = DataFrame(df,columns=['列名1','列名2'])
s1 = pd.Series(df['列名']) # 输出这一列,dataframe的每一列是一个series
s1.index\values 即对series操作,或者通过s1['索引值']
- df1.iterrows() #返回一个生成器,可以用for循环来访问
- eg: for row in df1.iterrows():
- print(row) #返回的数据为一个tuple
- s1,s2,s3为3个Series,用其组成一个人dataframe:
- df_new = pd.DataFrame([s1,s2,s3],index=['A','B','C'])
- # index是每个Series的名称
- # 初始是按横向拼接成的dataframe
- df1 = df1.T #转置,转置之后就和直接用dataframe生成的一样了
三、IO操作:
1、从粘贴板读取
df1 = pd.read_clipboard()
df1.to_clipboard() # 写入粘贴板
2、CSV文件
df1.to_csv('名字.csv',index=False) # false则表示不添加索引号
df2 = pd.read_csv('df1.csv') # 读取CSV文件
3、json
df1.to_json() # 转化成json文件
pd.read_json(df1.to_json()) # 读取json文件
4、html
df1.to_html('df1_html') # 转换成HTML文件
5、excel
df1.to_excel('df1.xlsx') # 生成Excel文件
四、Selecting and Indexing
df.head() # 返回前五行
df.tail() # 返回后五行
# 返回更多的内容则在括号中写出来,不写则默认为五行
df.iloc[:,:] #索引切片,定位,基于index,与索引名无关
df.loc[:,:] # 根据索引名来,label来过滤
Reindex:
~~series
s1.reindex(index=['A','B','C','D','E'],fill_value=10)
# fill_value 是指当重新写的index中有原来没有的,那么他本身输出为NaN,fill值为添加到这个索引下的值
# 创建一个新Series,另一种赋值的方法
s2 = Series(['A','B','C','D'],index=[1,5,10])
s2.reindex(index=range(15)) # 生成15个索引的Series,除了原有的其他的都是NaN
s2.reindex(index=range(15),method='ffill') # 在上一步的基础上,按顺序将上一个value填充到他下面的几个中(forward fill)
s1.drop('A') # 表示删除A的内容
~~dataframe
# 创建一个5*5的,通过numpy进行reshape
df1 = DataFrame(np.random.rand(25).reshape([5,5]),index=['A','B','D','E','F'],colums=['c1','c2','c3','c4','c5']) # 遗漏的index中的C,通过reindex来恢复
df1.reindex(index=['A','B','C','D','E','F']) # C被恢复并把value填充为NaN
# columns 同理
# 当index减少时就表现出切割的现象
df1.drop('A',axis=0) # axis=0,代表删除行;axis=1,代表删除列(后面遇到axis同样是这个意思)
五、NaN
- n = np.nan
- type(n) 是个浮点数float
- 与nan的运算结果均是nan
nan in series:
- s1.isnull\notnull() 判断是否为nan
- s1.dropna() # 删除掉value为NaN的行
nan in dataframe:
- 判断同series
df.dropna(axis=0,how='any',thresh=None) # axis表示行和列0,1来表示,how为any时表示有Nan就删掉,为all时表示全为nan时才删掉;thresh表示一个界限,超过这个数字的nan则被删掉
df.fillna(value=1) # 表示所有为nan的地方填充为1
df.fillna(value={0:0,1:1,2:2,3:3}) # 表示第一列的填充1,第二列的填充2,后面同理
注:dropna,fillna不改变原始数组
六、多级index
- index=[['1','1','1','2','2','2'],['a','b','c','a','b','c']] # 1,2为一级标题,abc为二级标题,即1的series下有abc,原始series下有1,2;获取内容时,可以s1['1']['a']
- s1[:,'a'] 返回所有一级series里的a
- 与dataframe的转换:
- df1 = s1.unstack()
- 逆转换:
- s2 = df1.unstack() # 这时一二级换了位置
- s2 = df1.T.unstack() # 这时是和原始完全一样的
注:dataframe的index和columns都可以转换成多级的
七、mapping and replace
当想在一个dataframe中加一列(columns),可以直接加df['列名']=Series([数据])
也可以通过map:创建一个字典,字典中的键是dataframe中的columns:
df1['新列名'] = df1['字典中的键那一列'].map(那个字典) 这个可以固定对应位置,方便改值,可以指定index来改值
replace in series:
s1.replace({1,np.nan}) # 通过字典来改值
s1.replace([1,2,3],[10,20,30]) # 把123索引改成10,20,30
作者:渔单渠
博客地址:http://www.cnblogs.com/yudanqu/
以上内容是我的一点点总结,希望能给有需要的朋友带来带你帮助,也希望有大神来指点指点。
python--Numpy and Pandas 基本语法的更多相关文章
- python numpy和pandas做数据分析时去掉科学记数法显示
1.Numpy import numpy as np np.set_printoptions(suppress=True, threshold=np.nan) suppress=True 取消科学记数 ...
- Python Numpy,Pandas基础笔记
Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...
- python安装numpy和pandas
最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...
- [转] python安装numpy和pandas
最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...
- 有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark
有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...
- Python入门之安装numpy和pandas
最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了. 首要条件,python版本必 ...
- python及numpy,pandas易混淆的点
https://blog.csdn.net/happyhorizion/article/details/77894035 初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝不可 ...
- 【转载】python安装numpy和pandas
转载:原文地址 http://www.cnblogs.com/lxmhhy/p/6029465.html 最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装 ...
- linux离线搭建Python环境及安装numpy、pandas
1.安装python2.7.3 Cent OS 6.5默认装的有python2.6.6,需要重新安装python2.7.3下载地址:https://www.python.org/downloads/s ...
- Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包
联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装. 工作的电脑不能上外网,所以不能通过直接输入pip命令来 ...
随机推荐
- Android的View类介绍-android的学习之旅(十三)
view概述 android绝大部分UI组件都放在android.view和android.widght包中,android的虽有UI组件都继承了View类. View类还有一个非常重要的子类:Vie ...
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...
- C++对C语言的变量检测增强
在C语言中,重复定义多个同名的全局变量是合法的 在C++中,不允许定义多个同名的全局变量 C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上 demo #include <st ...
- Mahout学习路线图
转自:http://blog.fens.me/hadoop-mahout-roadmap/ Mahout学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, ...
- UNIX网络编程——信号驱动式I/O
信号驱动式I/O是指进程预先告知内核,使得当某个描述符上发生某事时,内核使用信号通知相关进程. 针对一个套接字使用信号驱动式I/O,要求进程执行以下3个步骤: 建立SIGIO信号的信号处理函数. 设置 ...
- Android初级教程理论知识(第八章网络编程二)
HttpClient 发送get请求 创建一个客户端对象 HttpClient client = new DefaultHttpClient(); 创建一个get请求对象 HttpGet hg = n ...
- AnimatedPathView实现自定义图片标签
老早用过小红书app,对于他们客户端笔记这块的设计非常喜欢,恰好去年在小红书的竞争对手公司,公司基于产品的考虑和产品的发展,也需要将app社交化,于是在社区分享这块多多少少参照了小红书的设计,这里面就 ...
- ORACLE数据库 DBA常用知识
<常用命令参考> 个系统变量值 SQL> show user --显示当前连接用户 SQL> show error --显示错误 SQL> set heading off ...
- mysql filesort 的解决方案
在explain我们所使用的sql的时候,经常会遇到using filesort这种情况,原以为是由于有相同列值的原因引起,结果昨天看到公司的一个sql,跟同事讨论了下加上自己又做了一些测试,突然发现 ...
- 关于React Native 火热的话题,从入门到原理
本文授权转载,作者:bestswifter(简书) React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原 ...