一、Pandas的数据结构分析
Pandas的两个主要的数据结构:Series和DataFrame
(1)Series是一个类似一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成
indexelement0112233445
(2)通过传入一个列表来创建一个Series类对象:
创建Series类对象:
创建Series类对象,并指定索引:
使用dict进行构建:
(3)为了能方便地操作 Series对象中的索引和数据,所以该对象提供了两个属性index和values分别进行获取
1、获取s1的索引
2、获取s1的数据
获取位置索引3对应的数据
(4)DataFrame是一个类似于二维数组或表格(如excel)的对象,它每列的数据可以是不同的数据类型
(5) Pandas的DataFrame类对象创建:
创建数组
基于数组创建DataFrame对象
(6)在创建DataFrame类对象时,如果为其指定了列索引,则DataFrame的列会按照指定索引的顺序进行排列
索引的获取
属性获取
增减数据
二、 Pandas索引操作及高级索引
(1) Pandas中的索引都是Index类对象,又称为索引对象,该对象是不可以进行修改的,以保障数据的安全
Pandas还提供了很多Index的子类,常见的有如下几种:
1、Int64Index:针对整数的特殊Index对象。
2、MultiIndex:层次化索引,表示单个轴上的多层索引。
3、DatetimeIndex:存储纳秒寄时间戳。
(2)Pandas中提供了一个重要的方法是reindex(),该方法的作用是对原索引和新索引进行匹配,也就是说,新索引含有原索引的数据,而原索引数据按照新索引排序。
reindex()方法的语法格式如下:
DataFrame.reindex(labels = None,index = None,
columns = None,axis = None,method = None,
copy = True,level = None,fill_value = nan,limit = None,tolerance = None )
index:用作索引的新序列。
method:插值填充方式。
fill_value:引入缺失值时使用的替代值。
limit:前向或者后向填充时的最大填充量。
(3)重置索引
如果不想填充为NaN,则可以使用fill_value参数来指定缺失值。
ser_obj.reindex(['a', 'b', 'c', 'd', 'e', 'f'],fill_value = 6)
如果期望使用相邻的元素值进行填充,则可以使用method参数,该参数对应的值有多个
(4) 索引操作
Series有关索引的用法类似于NumPy数组的索引,只不过Series的索引值不只是整数。如果我们希望获取某个数据,既可以通过索引的位置来获取,也可以使用索引名称来获取。
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']]
布尔型索引同样适用于Pandas,具体的用法跟数组的用法一样,将布尔型的数组索引作为模板筛选数据,返回与模板中True位置对应的元素。
创建布尔型Series对象
ser_bool = ser_obj > 2
获取结果为True的数据ser_obj[ser_bool]
虽然DataFrame操作索引能够满足基本数据查看请求,但是仍然不够灵活。为此,Pandas库中提供了操作索引的方法来访问数据,具体包括:
loc:基于标签索引(索引名称),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。
iloc:基于位置索引(整数索引),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引。
三、算术运算与数据对齐
(1)Pandas执行算术运算时,会先按照索引进行对齐,对齐以后再进行相应的运算,没有对齐的位置会用NaN进行补齐。
如果希望不使用NAN填充缺失数据,则可以在调用add方法时提供fill_value参数的值,fill_value将会使用对象中存在的数据进行补充。
执行加法运算,补充缺失值
obj_one.add(obj_two, fill_value = 0)
四、数据排序
(1)Pandas中按索引排序使用的是sort_index()方法,该方法可以用行索引或者列索引进行排序
sort_index(axis = 0,level = None,ascending = True,
inplace = False,kind =' quicksort ',na_position ='last',
sort_remaining = True )
axis:轴索引,0表示index(按行),1表示columns(按列)。
level:若不为None,则对指定索引级别的值进行排序。
ascending:是否升序排列,默认为True表示升序。
(2)按索引对Series进行分别排序
ser_obj = pd.Series(range(10, 15), index=[5, 3, 1, 3, 2])
按索引进行升序排列
ser_obj.sort_index()
按索引进行降序排列
ser_obj.sort_index(ascending = False)
(3)按索引对DataFrame进行分别排序
df_obj = pd.DataFrame(np.arange(9).reshape(3, 3),
index=[4, 3, 5])
按行索引升序排列
df_obj.sort_index()
按行索引降序排列
df_obj.sort_index(ascending=False)
(4)按值的大小对Series进行排序
ser_obj = pd.Series([4, np.nan, 6, np.nan, -3, 2])
按值升序排列
ser_obj.sort_values()
(5)按值排序
在DataFrame中,sort_values()方法可以根据一个或多个列中的值进行排序,但是需要在排序时,将一个或多个列的索引传递给by参数才行
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]])
对列索引值为2的数据进行排序
df_obj.sort_values(by=2)
五、统计计算与描述
常用的统计计算
Pandas为我们提供了非常多的描述性统计分析的指标方法,比如总和、均值、最小值、最大值等。
统计描述
如果希望一次性输出多个统计指标,则我们可以调用describe()方法实现
describe(percentiles=None,include=None,exclude=Node)
六、层次化索引
(1)认识层次化索引
Series和DataFrame均可以实现层次化索引,最常见的方式是在构造方法的index参数中传入一个嵌套列表。
mulitindex_series = pd.Series([15848,13472,12073.8,7813,
7446,6444,15230,8269],
index=[['河北省','河北省','河北省','河北省',
'河南省','河南省','河南省','河南省'],
['石家庄市','唐山市','邯郸市','秦皇岛市',
'郑州市','开封市','洛阳市','新乡市']])
from_tuples()方法可以将包含若干个元组的列表转换为MultiIndex对象,其中元组的第一个元素作为外层索引,元组的第二个元素作为内层索引。
list_tuples = [('A','A1'), ('A','A2'), ('B','B1'),('B','B2'), ('B','B3')]
根据元组列表创建一个MultiIndex对象
multi_index = MultiIndex.from_tuples(tuples=list_tuples,
names=[ '外层索引', '内层索引'])
from_arrays()方法是将数组列表转换为MultiIndex对象,其中嵌套的第一个列表将作为外层索引,嵌套的第二个列表将作为内层索引。
multi_array = MultiIndex.from_arrays(arrays =[['A', 'B', 'A', 'B', 'B'],
['A1', 'A2', 'B1', 'B2', 'B3']],
names=['外层索引','内层索引'])
Original: https://blog.csdn.net/weixin_67638029/article/details/123303347
Author: 奇奇怪怪的小刘同学
Title: Pandas
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/676894/
转载文章受原作者版权保护。转载请注明原作者出处!