pandas入门

由于最近公司要求做数据分析,pandas每天必用,只能先跳过numpy的学习,先学习大Pandas库
Pandas是基于Numpy构建的,让以Numpy为中心的应用变得更加简单

pandas的数据结构介绍

  • Series

    • 由一组数据以及一组数据标签即索引组成
    import pandas as pd
    from pandas import Series,DataFrame obj = Series([4,7,-5,3])
    # 索引在左边,值在右边,默认从0开始
    obj
    0 4
    1 7
    2 -5
    3 3
    dtype: int64 # 制定索引
    obj2 = Series([4,7,-5,3],index = ['a','b','c','d'])
    obj2
    a 4
    b 7
    c -5
    d 3
    dtype: int64
    # 查看索引
    obj2.index
    Index(['a', 'b', 'c', 'd'], dtype='object') # 查询
    obj2[['a','b','c']]
    a 4
    b 7
    c -5
    dtype: int64 obj2[obj2>0]
    a 4
    b 7
    d 3
    dtype: int64
    • 还可以直接看成一个关系型字典
    sdata = {'ke':35000,'text':70000,'orgen':16000}
    obj3 = Series(sdata)
    obj3 ke 35000
    text 70000
    orgen 16000
    dtype: int64 keys = ['ke','text','orgen','xu']
    obj4 = Series(sdata, index=keys)
    obj4
    ke 35000.0
    text 70000.0
    orgen 16000.0
    xu NaN
    dtype: float64
    • 检测缺失值的重要两个函数 isnull和notnull
    obj4[obj4.isnull()]
    xu NaN
    dtype: float64 obj4[obj4.notnull()]
    ke 35000.0
    text 70000.0
    orgen 16000.0
    dtype: float64
    • Series本身和索引都有一个name属性
    # 可以理解成对象名称
    obj4.name = 'pop'
    # 对象的索引的名称
    obj4.index.name = 'state'
    obj4 state
    ke 35000.0
    text 70000.0
    orgen 16000.0
    xu NaN
    Name: pop, dtype: float64 # Series的索引可以就地修改
    obj4.index = ['new_ke','new_text','new_orgen','new_xu']
    new_ke 35000.0
    new_text 70000.0
    new_orgen 16000.0
    new_xu NaN
    Name: pop, dtype: float64
  • DataFrame

    • DataFrame是一个表格型数据结构,最常用的是直接传入一个由等长列表或者是Numpy数组组成的字典
    data = {'state':['oh','oh','vad','vad'],
    'yead':[2000,2001,2002,2003],
    'pop':[1.5,1.7,3.6,2.4]
    } frame = DataFrame(data)
    # 自动有序排列
    yead state pop
    0 2000 oh 1.5
    1 2001 oh 1.7
    2 2002 vad 3.6
    3 2003 vad 2.4 # 如果传入的列在数据中找不到,就产生NaN
    DataFrame(data,columns=['yar','yead'])
    yar yead
    0 NaN 2000
    1 NaN 2001
    2 NaN 2002
    3 NaN 2003

通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series

data = {'state':['oh','oh','vad','vad'],
'years':[2000,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4]
}
frame2 = pd.DataFrame(data,columns=['years','state','pop']) # 原地修改索引
frame2.index=['one','two','three','four']
frame2 years state pop
one 2000 oh 1.5
two 2001 oh 1.7
three 2002 vad 3.6
four 2003 vad 2.4 frame2.columns
Index(['years', 'state', 'pop'], dtype='object') # 通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series
# 字典操作
series_=frame2['state']
series_ one oh
two oh
three vad
four vad
Name: state, dtype: object # 对象操作
frame2.years one 2000
two 2001
three 2002
four 2003
Name: years, dtype: int64 # 查看具体一行的数据
frame2.ix['three'] years 2002
state vad
pop 3.6
Name: three, dtype: object # 修改具体一列的数
frame2['new_raw']=16.5
frame2 years state pop new_raw
one 2000 oh 1.5 16.5
two 2001 oh 1.7 16.5
three 2002 vad 3.6 16.5
four 2003 vad 2.4 16.5

将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配,否则自动填充空值

from pandas import Series
val = Series([-1.2,-1.5,-1.7], index=['two','four','five'])
frame2['new_raw'] = val
frame2 years state pop new_raw
one 2000 oh 1.5 NaN
two 2001 oh 1.7 -1.2
three 2002 vad 3.6 NaN
four 2003 vad 2.4 -1.5

删除列

# 为不存在的列赋值
frame2['eastern'] = frame2.state == 'oooo'
frame2 years state pop new_raw eastern
one 2000 oh 1.5 NaN False
two 2001 oh 1.7 -1.2 False
three 2002 vad 3.6 NaN False
four 2003 vad 2.4 -1.5 False del frame2['eastern'] frame2.columns
Index(['years', 'state', 'pop', 'new_raw'], dtype='object')

警告:通过索引方式返回的列只是相应数据的视图而已,并不是副本,对返回的Series所做的任何就地修改都会反映到源数据上,可以通过Series的copy方法显示的复制列

嵌套字典 外层字典的键作为列,内层键作为行索引

pop = {'Nevada':{2001:2.4,2002:2.9},
'Ohio':{2000:1.5,2001:1.7,2002:3.6}
}
frame3=pd.DataFrame(pop)
frame3
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6

转置

frame3.T
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6 # 内层字典的键会被合并、排序以形成最终的索引,如果显示指定了索引,就不会这样
frame3.reindex(index=[2001,2002,2000])
Nevada Ohio
2001 2.4 1.7
2002 2.9 3.6
2000 NaN 1.5

DataFrame构造函数所能接受的各种数据

类型 说明
二维ndarry 数据矩阵
由数组、列表或元组组成的字典 每个序列变成DataFrame的一列。所有序列的长度必须相同
Numpy结构化/记录数组 类似于由数组组成的字典
由Series组成的子典 每个Series会成为一列
由字典组成的字典 各内层字典会成为一列
字典或Series的列表 各项将会成为DataFrame的一行。
由列表或元组组成的列表 类似于'二维ndarray'
另一个DataFrame 该DataFrame的索引将会被沿用,除非显示指定了其他索引
Numpy的maskedArray 类似于'二维ndarray'的情况
如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来
frame3.index.name='year'
frame3.columns.name = 'state'
frame3 state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6

values属性返回一个二维ndarray的形式

frame3.values

array([[nan, 1.5],
[2.4, 1.7],
[2.9, 3.6]])

如果各列的数据类型不同,则会选用能兼容所有列的数据类型

frame2.values

array([[2000, 'oh', 1.5, nan],
[2001, 'oh', 1.7, -1.2],
[2002, 'vad', 3.6, nan],
[2003, 'vad', 2.4, -1.5]], dtype=object)

索引对象

pandas的索引对象负责管理轴标签和其他元数据比如轴名称等,构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index

obj = Series(range(3), index=['a','b','c'])
obj.index
Index(['a', 'b', 'c'], dtype='object') obj.index[:1]
Index(['a'], dtype='object')

index对象是不可修改的,这样子才能index对象在多个数据结构之间安全共享

obj.index[0] = '5'

TypeError                                 Traceback (most recent call last)
<ipython-input-24-61511960448d> in <module>()
----> 1 obj.index[0] = '5' E:\anaconda3\lib\site-packages\pandas\core\indexes\base.py in __setitem__(self, key, value)
2063
2064 def __setitem__(self, key, value):
-> 2065 raise TypeError("Index does not support mutable operations")
2066
2067 def __getitem__(self, key): TypeError: Index does not support mutable operations

index的继承

import numpy as np
index = pd.Index(np.arange(3))
index
Int64Index([0, 1, 2], dtype='int64') obj2 = Series([1.5,-2.5,0], index = index)
obj2 0 1.5
1 -2.5
2 0.0
dtype: float64 obj2.index is index
True

pandas中主要的Index对象

说明
Index 将轴标签表示为一个由Python对象组成的Numpy数组
Int64Index 针对整数的特殊Index
MultiIndex '层次化'索引对象,表示单个轴上的多次索引
DatetimeIndex 存储纳秒级时间戳
PeriodIndex 针对Period数据的特殊Index
frame3
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6 2000 in frame3.index
True
'Ohio' in frame3.columns
True

每个索引都有一些方法和属性

方法 说明
append 连接另一个index对象,产生新的index
diff 计算差集,并得到一个index
intersection 计算交集
union 计算并集
isin 计算y一个指示值是否都包含在参数集合中的布尔型数组
delete 删除索引i处的元素,并得到新的index
drop 将元素插入到索引i处,并得到新的index
insert 当各元素均大于等于前一个元素时,返回True
is_monotonic 当index没有重复值时,返回True
is_unique 当index没有重复值时,返回True
unique 计算index中唯一值的数组

Pandas之数据结构的更多相关文章

  1. Pandas 的数据结构

    Pandas的数据结构 导入pandas: 三剑客 from pandas import Series,DataFrame import pandas as pd import numpy as np ...

  2. pandas的数据结构之series

    Pandas的数据结构 1.Series Series是一种类似于一维数组的对象,由下面两个部分组成: index:相关的数据索引标签 values:一组数据(ndarray类型) series的创建 ...

  3. Pandas的使用(3)---Pandas的数据结构

    Pandas的使用(3) Pandas的数据结构 1.Series 2.DataFrame

  4. pandas中数据结构-Series

    pandas中数据结构-Series pandas简介 Pandas是一个开源的,BSD许可的Python库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具.Python与Pan ...

  5. 02. Pandas 1|数据结构Series、Dataframe

    1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index  . s.values # Series 数据结构 # Series 是带有标签的一 ...

  6. Python数据分析Pandas库数据结构(一)

    pandas数据结构 1.生成一维矩阵模拟数据 import pandas as pdimport numpy as nps = pd.Series([1,2,3,4,np.nan,9,9])s2 = ...

  7. pandas 的数据结构(Series, DataFrame)

    Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标 ...

  8. pandas 的数据结构Series与DataFrame

    pandas中有两个主要的数据结构:Series和DataFrame. [Series] Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引. ...

  9. pandas的数据结构

    要使用pandas,需要熟悉它的两个主要的数据结构,Series和DataFrame. Series series是一种类似于以为数组的对象,它由一组数据(各种numpy的数据类型)以及一组与之相关的 ...

随机推荐

  1. 数据持久化—真机上的Plist写入

    其实写入不到真机里面主要是你写入时,当前那文件夹里你要写入的plist根本不存在 所以你怎么写都写不进去,所以你必须先创建你要写入的plist; 你用这样初始化程序就能自己创建: NSMutableA ...

  2. Exchange 2010 OWA部分用户不能访问

    Exchange 2010 OWA部分用户不能访问 http://blog.csdn.net/xuhuojun/article/details/17364619

  3. Maven更新后本地仓库jar后缀带有 lastUpdated

    Maven在下载仓库中找不到相应资源时,会生成一个.lastUpdated为后缀的文件 1.需要通过mvn compile -U查明下载失败的原因,一般就是setting.xml中的配置问题 2.注意 ...

  4. WebService简单教程

    一.简介 1.什么是WebService? WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Htt ...

  5. opencv画出轮廓外接矩形

    Mat cannyImage; /// Detect edges using canny Canny(src, cannyImage, , , ); vector<vector<Point ...

  6. Ubuntu下无法使用Secure_CRT连接服务器

    虚拟机使用 1 .指令安装了SSH服务器 sudo apt-get install openssh-server 2. 输入命令 ps | grep ssh 查看SSH服务是否开启 显示服务已开启 3 ...

  7. vue eslint 代码自动格式化

    vue-cli 代码风格为 JavaScript Standard Style 代码检查规范严格,一不小心就无法运行,使用eslint的autoFixOnSave可以在保存代码的时候自动格式化代码 V ...

  8. jquery 设计的扩展---初级

    1. 写一个构造函数G,调用G 时,返回G上的fn 对象的init() 的实例 2.设置G.fn 的指向,使用G.fn 与G.prototype指向同一个对象 2.1 重写G.prototype 对象 ...

  9. 通过SSH克隆远程仓库(GitLab)到本地

    由于不是任何用户都能从远程仓库克隆到本地的,也是需要鉴别的,因此本地需要用git bash 创建一个公钥,而远程仓库也要把这个公钥保存下来,进而本地才可以从远程download.主要步骤如下: 1.首 ...

  10. 关于maven中的快照版本(snapshot)与正式版本(release)解析。

    Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...