小弟的目录
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列 |