博客地址: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 基本语法的更多相关文章

  1. python numpy和pandas做数据分析时去掉科学记数法显示

    1.Numpy import numpy as np np.set_printoptions(suppress=True, threshold=np.nan) suppress=True 取消科学记数 ...

  2. Python Numpy,Pandas基础笔记

    Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...

  3. python安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...

  4. [转] python安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...

  5. 有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark

    有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...

  6. Python入门之安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了. 首要条件,python版本必 ...

  7. python及numpy,pandas易混淆的点

    https://blog.csdn.net/happyhorizion/article/details/77894035 初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝不可 ...

  8. 【转载】python安装numpy和pandas

    转载:原文地址 http://www.cnblogs.com/lxmhhy/p/6029465.html 最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装 ...

  9. linux离线搭建Python环境及安装numpy、pandas

    1.安装python2.7.3 Cent OS 6.5默认装的有python2.6.6,需要重新安装python2.7.3下载地址:https://www.python.org/downloads/s ...

  10. Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

    联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装. 工作的电脑不能上外网,所以不能通过直接输入pip命令来 ...

随机推荐

  1. Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴

    对于在Linux下开发的同学来说,Shell可以说是一种基本功. 对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell.对于Release Team,软件配置管理的 ...

  2. Win 10 下 android studio显示 Intel haxm无法安装,以及VT-X和hyper-x的冲突问题

               我 的电脑是神舟战神k650c i7 D4,处理器是Intel core i7 4710-MQ,系统是win 10的 我心血来潮想学习一下安卓开发,就首先安装了android s ...

  3. android sdutio常用快捷键

    快捷键 说明 F2 定位到高亮错误或警告的位置 F4 若选中项目,打开 Project Struture F5 复制文件 Alt+F3 选中文本,逐个往下查找相同文本,并高亮显示 Alt+F1 可以将 ...

  4. Fedora 20: How to enable SSH

    1. systemctl  enable sshd.service 2. service sshd restart

  5. 【一天一道LeetCode】#104. Maximum Depth of Binary Tree

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源:http ...

  6. Android开发技巧——PagerAdapter的再次简单封装

    这次再对内容为View的ViewPager的适配器PagerAdapter进行简单的封装,支持List数据和SparseArray的数据,带更新视图功能. 首先,先贴上最上面的抽象类代码: /* * ...

  7. iOS中 GCD-Grand Central Dispath 多线程 UI_21

    GCD:Grand Central Dispath "牛逼的中枢调度器";是纯C语言编写的,提供了很多比较强大的函数 GCD:优势 1.目前是苹果主推的线程管理方式 2.它会自动的 ...

  8. DB Query Analyzer 6.04 is distributed, 78 articles concerned have been published

        DB Query Analyzer 6.04 is distributed,78 articles concerned have been published  DB Query Analyz ...

  9. 在go中使用json作为主要的配置格式

    最近在用go重构,在先前的代码中,我们使用的ini文件进行配置,但是因为很多历史遗留问题,导致配置混乱,维护困难,自然也需要考虑重构了. 通用配置格式 通用的配置格式有很多,常用的就有ini,json ...

  10. React Native控件之Listview

    ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. ListView更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,ListView并不立即渲染 ...