Pandas

一、Pandas的数据结构分析

Pandas的两个主要的数据结构:Series和DataFrame

(1)Series是一个类似一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成

index element
0 1
1 2
2 3
3 4
4 5

(2)通过传入一个列表来创建一个Series类对象:

创建Series类对象:

Pandas

创建Series类对象,并指定索引:

Pandas

使用dict进行构建:

Pandas

(3)为了能方便地操作 Series对象中的索引和数据,所以该对象提供了两个属性index和values分别进行获取

1、获取s1的索引

Pandas

2、获取s1的数据

Pandas

获取位置索引3对应的数据

Pandas

(4)DataFrame是一个类似于二维数组或表格(如excel)的对象,它每列的数据可以是不同的数据类型

Pandas

(5)Pandas的DataFrame类对象创建:

Pandas

创建数组

Pandas

基于数组创建DataFrame对象

Pandas

(6)在创建DataFrame类对象时,如果为其指定了列索引,则DataFrame的列会按照指定索引的顺序进行排列

Pandas

获取索引

Pandas

财产收购

Pandas

增加或减少数据

Pandas

二、 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参数,该参数对应的值有多个

Pandas

(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结构既包含行索引,也包含列索引。其中,行索引是通过index属性进行获取的,列索引是通过columns属性进行获取的。Pandas

虽然DataFrame操作索引能够满足基本数据查看请求,但是仍然不够灵活。为此,Pandas库中提供了操作索引的方法来访问数据,具体包括:

loc:基于标签索引(索引名称),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。

iloc:基于位置索引(整数索引),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引。

3.算术运算和数据对齐

(1)Pandas执行算术运算时,会先按照索引进行对齐,对齐以后再进行相应的运算,没有对齐的位置会用NaN进行补齐。

Pandas

如果希望不使用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)

5、统计计算及说明

常用统计计算

Pandas为我们提供了非常多的描述性统计分析的指标方法,比如总和、均值、最小值、最大值等。

Pandas

统计说明

如果希望一次性输出多个统计指标,则我们可以调用describe()方法实现

describe(percentiles=None,include=None,exclude=Node)

6.层次索引

(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=['外层索引','内层索引'])

版权声明:本文为博主奇奇怪怪的小刘同学原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_67638029/article/details/123303347

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年3月7日 下午4:28
下一篇 2022年3月8日 下午7:52

相关推荐