小弟的目录
Pandas概述:
Pandas是一个基于Numpy的数据分析包,它是为了解决数据分析任务而创建的。Pandas中纳入了大量库和标准的数据模型,提供了高效地操作大型数据集所需的函数和方法,使用户能够快速便捷地处理数据。
Pandas特点:
- 一个快速高效的DataFrame对象,具有默认和自定义的索引
 *用于在数据结构和不同文件格式中读取和写入数据,比如文本文件
 *智能数据对齐和缺失数据的集成处理
 *基于标签切片和花式索引获取数据集的子集
 *可以删除或插入来自数据结构的列
 *按数据分组进行聚合和转换
 *高性能的数据合并和连接
 *时间序列功能
Pandas的数据结构分析
Pandas中有两个主要的数据结构:Series和DataFrame。其中Series是一维的、DataFrame是二维的。
Series
Series的介绍
Series是一个类似于一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成。
 Series
| index | element | 
|---|---|
| 0 | 1 | 
| 1 | 2 | 
| 2 | 3 | 
| 3 | 4 | 
| 4 | 5 | 
索引在左,数据在右
Series对象的创建
Pandas的Series类对象可以使用以下构造方法创建:
 class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
构造方法中常用参数含义如下:
1.data:传入的数据,可以是ndarray、list等。
 2.index:索引,必须是唯一的,且与数据的长度相同。如果没有传入索引参数,默认会自动创建一个从0~N的整数索引。
 3.dtype:数据的类型
 4.copy:是否复制数据,默认为False
import pandas as pd
ser_obj = pd.Series([1,2,3,4,5])
ser_obj
可以在创建的时候,为数据指定索引:
import pandas as pd
ser_obj = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
ser_obj
使用列表构建Series外,可以使用dict进行构建,具体如下:
year_data = {2001:17.8, 2002:20.1, 2003:16.5}
ser_obj2 = pd.Series(year_data)
ser_obj2
为了方便的操作Series对象中的索引和数据,所以该对象提供两个属性index和values分别进行获取。
DataFrame
DataFrame的介绍:
DataFrame是一个类似于二维数组或表格的对象,它每列数据可以是不同的数据类型。由索引和数据组成,有行索引、还有列索引。
 默认索引也是自动创建,默认是从0-N的整数类型索引。
DataFrame对象的创建:
Pandas的DataFrame类对象可以使用以下构造方法创建:
 pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
 常用参数如下:
- index:行标签。如果没有传入索引参数,默认会自动创建一个从0-N的整数类型索引
 *- columns:列标签,如果没有传入索引参数,默认会自动创建一个从0-N的整数类型索引
import numpy as np
import pandas as pd
demo_arr = np.array([['a','b','c'], ['d','e','f']])
df_obj = pd.DataFrame(demo_arr)
如果在创建DataFrame类对象时,指定了索引,则DataFrame的列会按照指定的索引顺序进行排列:
df_obj =pandas.DataFrame(demo_arr,)columns=['No1','No2','No3']
df_obj
为了便于获取每列数据,可以使用列索引方式,也可以通过访问属性方式来获取,返回一个结果是Series对象,该对象拥有与原DataFrame对象相同的行索引。
element = df_obj['No2']
element
注意:在获取DataFrame的一列数据时,推荐使用列索引方式
要想为DataFrame增加一列数据,则可以通过给列索引或者列名称赋值的方式实现,类似于给字典增加键值对的操作。
df_obj['No4'] = ['g','h']
df_obj
删除一列数据:
del df_obj['No3']
print(df_obj)
Pandas的索引对象:
索引对象的创建
-  pd.X(array-like) index = pd.Index(np.arange(3))
索引对象的分类
| 分类 | 介绍 | 描述 | 
|---|---|---|
| Index | 最泛化的对象 | 轴标签—>数组 | 
| Int64Index | 用于整数的特殊对象 | |
| MultiIndex | 层次化索引对象(单个轴上的多层索引) | 可看作是元组的数组 | 
| DatetimeIndex | 用于纳米级索引对象 | 
索引对象的获取:
| 分类 | 获取方法 | 
|---|---|
| Series | .index | 
| DataFrame | ① .index ② .columns | 
索引对象的特点:
索引对象是不可修改的,这样能够保证Index对象在不同的数据结构之间安全的共享
obj = Series(data,index=index)
print(obj.index is index)
结果为True
索引对象的方法和属性
方法:
| 方法表达式 | 描述 | 特征 | 
|---|---|---|
| append() | 连接另一个索引对象 | 数组 | 
| diff/intersection/union() | Index–>差集/交集/并集 | |
| isin() | 各值是否在参数集合中 | 布尔数组 | 
| delete/insert() | 删除/插入索引出的元素 | |
| drop() | 删除传入的值 | 会生成新的Index | 
| unique() | 计算唯一值数组 | 
属性:
| 属性 | 返回值 | 描述 | 
|---|---|---|
| is_monotonic | True | 各元素均大于前一个元素 | 
| is_unique | True | 当前Index无重复值 | 
索引对象的重命名(轴索引)
有两种方式:
-  直接赋值 
-  obj.rename() 方法 操作 特征 直接赋值 obj.index/columbs = … 就地修改 obj.rename() index/columns = 函数/字典(传入部分轴) obj.rename() inplace=默认(保留原始数据)/True(就地修改) data.index = data.index.map(str.upper) data.rename(index={old:new},columns = {old;new}) data.rename(index=str.title,columns = str.upper)
索引的整数索引:
程序:
客官们,先来看一个整数索引的示例:
import numpy as np
import pandas as pd
from pandas import Series
ser = Series(np.arange(3))
print(ser.index)
这个程序的输出结果是:
(start = 0,stop = 3,step = 1)
import numpy as np
import pandas as pd
from pandas import Series
ser = Series(np.arange(3))
print(ser[-1])
这个程序会发生错误.
解析:
第一个程序能够正确的运行,并返回.
索引器:自动递增的数字索引(RangeIndex)
而第二个程序无法正常运行时因为索引是基于标签或者位置的
这样我们得出了整数索引的规则.
整数索引的规则:
当含有索引器时:
-  根据整数进行数据选取 
-  总是面向标签的--------整数->标签名 包括ix切片 非整数索引:示例: import numpy as np import pandas as pd from pandas import Series ser2 = Series(np.arange(3),index = ['a','b','c'])使用任意类型的索引 还是基于标签或者位置的.  
整数标签基于位置的使用方法:
| 数据结构 | 方法 | 描述 | 
|---|---|---|
| Series | series.iloc[i]/.iat[i] | i为整数 | 
| DataFrame | DF.iloc[*] | 1️⃣ [ i ]第 i +1行 2️⃣ [ : j] 第 j + 1列 | 

 京公网安备 11010502036488号
京公网安备 11010502036488号