Pandas索引 *** 作及高级索引

Pandas索引 *** 作及高级索引,第1张

Pandas索引 *** 作及高级索引 Pandas索引 *** 作及高级索引 索引对象

Pandas 中的索引都是 Index 对象,又称索引对象,该对象是不可以进行修改的,以保证数据的安全。例如,创建一个 Series 类对象,为其制定索引,然后再对索引重新赋值后会提示“索引不支持可变 *** 作”的错误信息,示例代码如下:

ser_obj = pd.Series(range(5),index=['a','b','c','d','e'])
ser_index = ser_obj.index
ser_index        #Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
ser_index['2']='cc'

Index 类对象的不可变特性是非常重要的,正因如此,多个数据结构之间才能够安全的共享 Index 对象。例如,创建两个共同使用同一个 Index 对象的 Series 类对象,具体代码如下:

ser_obj1 = pd.Series(range(3),index=['a','b','c'])
ser_obj2 = pd.Series(['a','b','c'],index=ser_obj1.index)
ser_obj2.index is sr_obj1.index


除了泛指的 Index 对象以外,Pandas 还提供了很多 Index 的子类,常见的又如下几种:
( 1 ) Int64Index:针对整数的特 Index 对象。
( 2 ) MultiIndex:层次化索引,表示单个轴上的多层索引。
( 3 ) DatetimeIndex:存储纳秒寄时间戳





重置索引

Pandas 中提供了一个重要的方法是 reindex()

reindex() 方法的语法格式如下:

Dateframe.reindex(lables=None, index=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:前向或者后向填充时的最大填充量。



新索引中含有原索引的数据,而原索引数据按照新索引排序,如果新索引中没有原索引数据,那么程序不仅不会报错,而且会添加新的索引,并将值填充为 NaN 或者使用 fil_value() 填充数据

缺失值默认使用NaN填充

ser_obj1 = pd.Series([1,2,3,4,5],index=['c','d','e','f','g'],dtype='int64')

ser_obj2 = ser_obj1.reindex(['a','b','c','d','e','f'])		# 重置索引






如果不想使用NaN填充,可以使用fill_value参数来指定缺失值

ser_obj2 = ser_obj1.reindex(['a','b','c','d','e','f'],fill_value=6)


如果期望使用相邻元素值(前边或者后边元素的值)进行填充,则可以使用 method参数

参数说明ffill 或 pad向前填充值bfill或backfill后向填充值nearest从最近的索引值填充

例:

ser_obj1 = pd.Series([1,3,5,7],index=[0,2,4,6])

ser_obj2 = ser_obj1.reindex(range(6),method='ffill')		# 前向填充值





索引 *** 作 Series的索引 *** 作

和 Numpy 的 ndarray 对象的 *** 作类似

  1. 通过 整数索引 索引名 获取数据
ser_obj = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

# 通过整数索引获取数据
ser_obj[2]		# c

# 通过索引名获取数据
ser_obj['a']		# a
  1. 索引切片
    可以使用整数索引进行切片,包含起始位置但不包括结束位置。

    也可以使用索引名进行切片,但包括结束位置。

ser_obj = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

# 整数索引切片
ser_obj[0:3]

# 索引名切片
ser_obj['a':'c']

  1. 不连续索引

    如果是获取的不连续的数据,可以使用不连续索引

ser_obj = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

ser_obj[[0,2,4]]		# 通过不连续位置索引获取数据集

ser_obj[['a','c','e']]		# 通过不连续索引名称获取数据集

  1. 布尔型索引
ser_obj = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])

ser_bool = ser_obj>2		# 创建布尔型 Series 对象

ser_obj[ser_bool]		# 获取结果为 True 的数据





Dataframe 的索引 *** 作

Dataframe 结构既包括行索引,也包括列索引。其中,行索引是通过 index 属性进行获取的,列索引是通过 columns 属性获取的

  1. 获取列
    Dataframe 中每列的数据都是一个Series对象,我们可以使用列索引进行获取。
arr = np.arange(12).reshape(3,4)
df_obj= pd.Dataframe(arr, columns=['a','b','c','d'])
df_obj

df_obj['b']

如果想要从 Dataframe 中获取多个不连续的 Series 对象,则同样可以使用不连续索引进行实现

df_obj[['b','d']]

Dataframe 支持切片获取Series对象

df_obj[:2]

Dataframe 可以使用切片后再通过索引获取其中的数据

df_obj[:3][['b','d']]



  1. loc方法 和iloc方法

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


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

假设,现在有一个 Dataframe 对象,具体代码如下:

arr = np.arange(12).reshape(3,4)
df_obj= pd.Dataframe(arr, columns=['a','b','c','d'])
df_obj


接下来,我们演示如何使用它们来获取列数据

注意:[] 中的第一个参数是行索引,第二个是列索引

  1. 获取单列数据
df_obj[:,'a']		# [] 中的第一个参数是行索引,第二个是列索引
df_obj.iloc[:,0]		

上面两个结果相同:

  1. 获取多列数据
df_obj[:,['a','c']]
df_obj[:,[0,2]]

上面两个结果相同:

  1. 使用花式索引访问数据
df_obj.loc[1:2,['b','c']]
df_obj.iloc[1:3,[1,2]]

它们两个的输出结果也是一样的,具体如下

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5680391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存