1、Series是一维的数据结构
2、DataFrame是二维的、表格型的数据结构
1、Series是一个类似于一维数组的对象,能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据与之相关的索引两部分构成。
2、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 #导入pandas库
# 创建Series类对象,并指定索引
ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
# 获取ser_obj的索引
ser_obj.index
# 获取ser_obj的数据
ser_obj.values
1、DataFrame是一个类似于二维数组或表格的对象,每列的数据可以是不同的数据类型。与Series的结构相似,DataFrame的结构也是由索引和数据组成的,不同的是,DataFrame的索引不仅有行索引,还有列索引。
2、构造方法创建
pandas.DataFrame(data=None,index=None,columns=None,
dtype=None,copy=False)
常用参数含义如下:
(1)index:行标签,默认会自动创建一个0~N的整数索引
(2)columns:列标签,默认会自动创建一个0~N的整数索引
import numpy as np
import pandas as pd
# 创建数组
demo_arr = np.array([['a', 'b', 'c'], ['d', 'e', 'f']])
# 常见DataFrame对象,指定列索引
df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
# 通过列索引的方式获取一列数据
element = df_obj['No2']
# 通过属性获取列数据
element = df_obj.No2
注意:在获取DataFrame的一列数据时,一般使用列索引的方式获取。
3、增加、删除一列数据
# 增加No4一列数据
df_obj['No4'] = ['g', 'h']
# 删除No3一列数据
del df_obj['No3']
1、Pandas中的索引都是Index类对象,又称为索引对象,该对象是不可以进行修改的,以保障数据的安全。索引不支持可变操作
2、创建两个共用同一个Index对象的Series类对象
ser_obj1 = pd.Series(range(3), index=['a', 'b', 'c'])
ser_obj2 = pd.Series(range(3), index=ser_obj1.index)
1、reindex()方法的作用是对原索引和新索引进行匹配
reindex()方法的语法格式如下:
DataFrame.reindex(labels=None,inedx=None,columns=None,
axis=None,method=None,copy=True,level=None,
fill_value=nan,limit=None,tolerance=None)
参数含义如下:
(1)index:用作索引的新序列
(2)method:插值填充方式
(3)fill_value:引入缺失值时使用的替代值
(4)limit:前向或者后向填充时的最大填充量
ser_obj = pd.Series([1, 2, 3, 4, 5], index=['c', 'd', 'a', 'b', 'e'])
# 重新索引时指定填充的缺失值
ser_obj2 = ser_obj.reindex(['a', 'b', 'c', 'd', 'e','f'],fill_value=6)
fill_value参数会让所有的缺失数据都填充为同一个值。
2、method参数
fill或pad 前向填充值
bfill或backfill 后向填充值
nearest 从最近的索引值填充
# 创建Series对象,并为其指定索引
ser_obj3 = pd.Series([1,3,5,7],index=[0,2,4,6])
# 重新索引,前向填充值
ser_obj3.reindex(range(6),method='ffill')
# 重新索引,后向填充值
ser_obj3.reindex(range(6),method='bfill')
既可以通过索引的位置来获取,也可以使用索引名称来获取。
ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
ser_obj[2] # 使用索引位置获取数据
ser_obj['c'] # 使用索引名称获取数据
使用切片来获取数据
ser_obj[2:4] # 使用位置索引进行切片,取值区间为前闭后开
ser_obj['c':'e'] # 使用索引名称进行切片,取值结果都为闭区间
获取不连续的数据
ser_obj[[0,2,4]] # 通过不连续位置索引获取数据集
ser_obj[['a','c','d']] # 通过不连续的索引名称获取数据集
创建布尔型索引来筛选数据
ser_bool = ser_obj>2 # 创建布尔型Series对象
ser_obj[ser_bool] # 获取结果为True的数据
DataFrame既包含行索引,也包含列索引。行索引通过index属性获取,列索引通过columns属性获取。
arr = np.arange(12).reshape(3, 4)
# 创建DataFrame对象,并为其指定列索引
df_obj = pd.DataFrame(arr, columns=['a', 'b', 'c', 'd'])
df_obj['b'] #获取b列的数据
df_obj[['b', 'd']] # 获取不连续的Series对象
df_obj[:2] # 使用切片获取第0~1行的数据
# 使用多个切片先通过行索引获取第0~2行的数据
# 再通过不连续列索引获取第b、d列的数据
df_obj[:3][['b', 'd']]
使用Pandas提供的方法操作索引
(1)loc:基于标签索引(索引名称,如a、b等),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。
(2)iloc:基于位置索引(整数索引,从0到length-1),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引。
arr=np.arange(16).reshape(4,4)
dataframe_obj=pd.DataFrame(arr,columns=['a','b','c','d'])
dataframe_obj.loc[:,['c','a']]
dataframe_obj.iloc[:,[2,0]] # 结果与loc结果相同
dataframe_obj.loc[1:2,['b','c']]
dataframe_obj.iloc[1:3,[1,2]] # 结果与loc结果相同
Pandas执行算术运算时,会先按照索引进行对齐,对齐之后再进行相应的运算,没有对齐的位置会用NaN进行补齐。Series按行索引对齐,DataFrame按行索引和列索引对齐。
obj_one = pd.Series(range(10, 13), index=range(3))
obj_two = pd.Series(range(20, 25), index=range(5))
obj_one+obj_two # 执行相加运算,没有对齐的位置使用NaN值进行填充
若不希望使用NaN来填充缺失值,调用add方法时提供fill_value参数的值对数据进行填充。
obj_one.add(obj_two,fill_value=0) # 执行加法运算,补充缺失值
Pandas按索引排序使用sort_index()方法,该方法可以用行索引或者列索引进行排序,sort_index()语法格式如下:
sort_index(axis=0,level=None,ascending=True,inplace=False,
kind='quicksort',na_position='last',sort_remaining=True)
参数含义如下:
(1)axis:轴索引(排序的方向),0表示index(按行),1表示columns(按列)。
(2)level:若不为None,则对指定索引级别的值进行排序。
(3)ascending:是否升序排列,默认为True,表示升序。
(4)inplace:默认为False,表示对数据表进行排序,不创建新的实例。
(5)kind:选择排序算法。
ser_obj = pd.Series(range(10, 15), index=[5, 3, 1, 3, 2])
ser_obj.sort_index() # 按索引进行升序排列
ser_obj.sort_index(ascending=False) # 按索引进行降序排列
df_obj = pd.DataFrame(np.arange(9).reshape(3, 3), index=[4, 3, 5])
df_obj.sort_index() # 按行索引升序排列
df_obj.sort_index(ascending=False) # 按行索引降序排列
注意:当DataFrame进行排序操作时,要注意轴的方向。如果没有指定axis参数的值,则默认会按照行索引进行排序;如果指定axis=1,则会按照列索引进行排序。
Pandas中按值排序的方法为sort_values(),该方法的语法格式为:
sort_values(by,axis=0,ascending=True,inplace=False,
kind='quicksort',na_position='last')
参数含义如下:
(1)by:表示排序的列。
(2)na_position:只有两个值:first和last,若设为first,则会将NaN值放在开头;若设为last,则会将NaN值放在最后。
ser_obj = pd.Series([4, np.nan, 6, np.nan, -3, 2])
ser_obj.sort_values() # 按值升序排列
df_obj = pd.DataFrame([[0.4, -0.1, -0.3, 0.0], [0.2, 0.6, -0.1, -0.7], [0.8, 0.6, -0.5, 0.1]])
df_obj.sort_values(by=2) # 对列索引为2的数据进行排序
注意:当Series对象调用sort_value()方法按值进行排序时,所有缺失值默认都会放在末尾。在DataFrame中,sort_value()方法可以根据一个或多个列中的值进行排序,但是需要在排序时将一个或多个列的索引传递个by参数才行。
函数名称 | 说 明 | 函数名称 | 说 明 |
---|---|---|---|
sum | 计算和 | std | 样本值的标准差 |
mean | 计算平均值 | skew | 样本值的偏度(三阶矩) |
median | 获取中位数 | kurt | 样本值的峰度(四个阶矩) |
max、min | 获取最大值和最小值 | cumsum | 样本值的累积和 |
idxmax、idxmin | 获取最大和最小索引值 | cummin、cummax | 样本值的累积最小值和累积最大值 |
count | 计算非NaN值的个数 | cumprod | 样本值的累计积 |
head | 获取前N个值 | describe | 对Series和DataFrame列计算汇总统计 |
var | 样本值的方差 |
df_obj=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'])
df_obj.sum() # 计算每列的和
df_obj.max() # 获取每列的最大值
df_obj.min(axis=1) # 沿着横向轴,获取每行的最小值
describe()方法的语法格式
describe(percentiles=None, include=None, exclude=None)
参数含义:
(1)percentiles:输出中包含的百分数,位于[0,1]之间。如果不设置该参数,则默认为[0.25,0.5,0.75],返回25%,50%,75%分位数。