Pandas组队学习: task3

一、索引

1.切片的用法

用于取出两个索引的中间值,返回会包含切片的两个端点,如下所示:

s = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'a', 'a', 'a', 'c'])
s['b':'c']
Out[133]: 
b    2
a    3
a    4
a    5
c    6
dtype: int64

此时将端点b和c也一并进行了返回。因为所有的索引中具有唯一的'b'和'c',所以不会报错。

若要对重复索引进行切片,例如a,则要先排序后再进行切片

s.sort_index()['a': 'b']
Out[14]: 
a    1
a    3
a    4
a    5
b    2
dtype: int64

对整数索引切片时,取出的是位置的值,例如:

s = pd.Series(['pig','pig','dog','cat'],index=(1,3,4,2))
s
Out[136]: 
1    pig
3    pig
4    dog
2    cat
dtype: object
s[3:4]
Out[137]: 
2    cat
dtype: object

取出来的是第四个元素,但对某一行索引时,还是和之前一样:

s[3]
Out[139]: 'pig'

2.loc和iloc

loc有两个输入,第一个输入为行,第二个输入为列。对于整数索引,直接切片时,结果如下:

df
Out[148]: 
                          School      Grade            Name
5  Shanghai Jiao Tong University   Freshman    Gaopeng Yang
4              Peking University   Freshman  Changqiang You
3  Shanghai Jiao Tong University     Senior         Mei Sun
2               Fudan University  Sophomore    Xiaojuan Sun
1               Fudan University  Sophomore     Gaojuan You

df[5:3]
Out[149]: 
Empty DataFrame
Columns: [School, Grade, Name]
Index: []

得出的结论和之前相同,不使用任何函数,直接切片时是按位置进行切片的,但使用loc切片时,结果如下:

df.loc[5:3]
Out[150]: 
                          School     Grade            Name
5  Shanghai Jiao Tong University  Freshman    Gaopeng Yang
4              Peking University  Freshman  Changqiang You
3  Shanghai Jiao Tong University    Senior         Mei Sun

说明使用loc切片时,是对索引值进行切片,且切片包含端点。

iloc与loc基本一致,但是是针对位置进行索引。

用ilco对整数索引进行切片:

df.iloc[5:3]
Out[151]: 
Empty DataFrame
Columns: [School, Grade, Name]
Index: []

df.iloc[3:5]
Out[152]: 
             School      Grade          Name
2  Fudan University  Sophomore  Xiaojuan Sun
1  Fudan University  Sophomore   Gaojuan You

由此可知切片是对位置进行切片,且不包含结束的端点

在使用布尔列表的时候要特别注意,不能传入 Series 而必须传入序列的 values ,如下:

df.iloc[(df.School=='Fudan University').values]
Out[155]: 
             School      Grade          Name
2  Fudan University  Sophomore  Xiaojuan Sun
1  Fudan University  Sophomore   Gaojuan You

使用loc可以直接传入Series:

df.loc[(df.School=='Fudan University')]
Out[157]: 
             School      Grade          Name
2  Fudan University  Sophomore  Xiaojuan Sun
1  Fudan University  Sophomore   Gaojuan You

且loc加不加values均可:

df.loc[(df.School=='Fudan University').values]
Out[156]: 
             School      Grade          Name
2  Fudan University  Sophomore  Xiaojuan Sun
1  Fudan University  Sophomore   Gaojuan You

总结一下iloc和loc的区别:

  • 使用loc切片时,是对索引值进行切片,且切片包含两个端点。iloc切片是对位置进行切片,且不包含结束的端点

  • 在使用布尔列表的时,iloc不能传入 Series 而必须传入序列的 values ,loc传入两者均可

3.随机抽样

  • 抽样函数resample,主要参数为replace,表示有无放回;weights,表示每个样本抽样的概率 , 例如:
df_sample
Out[159]: 
  id  value
0  a      1
1  b      2
2  c      3
3  d      4
4  e      5

有放回的均匀抽样可以写作:

df_sample.sample(3,replace =True,weights=np.ones(5))	#weights相同即可代表均匀抽样

二、多级索引

多级索引顾名思义,就是列和行不再是单一的一个属性,而是多个属性。进行索引时使用元组索引

切片

先构造多级索引

df.set_index(['School','Grade'])
Out[170]: 
                                                   Name
School                        Grade                    
Shanghai Jiao Tong University Freshman     Gaopeng Yang
Peking University             Freshman   Changqiang You
Shanghai Jiao Tong University Senior            Mei Sun
Fudan University              Sophomore    Xiaojuan Sun
                              Sophomore     Gaojuan You

切片时,无论元组在索引中是否重复出现,都必须经过排序才能使用切片,例如:

df.loc[('Shanghai Jiao Tong University'):]
UnsortedIndexError: 'Key length (1) was greater than MultiIndex lexsort depth (0)'

排序后:

df_sorted = df.sort_index()
df_sorted.loc[('Shanghai Jiao Tong University'):]
Out[194]: 
                                                Name
School                        Grade                 
Shanghai Jiao Tong University Freshman  Gaopeng Yang
                              Senior         Mei Sun

三、索引的操作与运算

1.交换和删除

  • swaplevel(0,2,axis=1) :只能交换两个,表示交换列索引的第三个和第一个
  • recorder_levels([2,1,0],axis=0) :可以交换任意个,表示交换行索引的第一个和第三个
  • dropleve([0,1],axis=1) :表示删除第一和第二列

2.索引属性的修改

  • renam_axis :对索引层的名字修改
  • rename :对索引的值修改

3.索引设置和重置

  • set_index :设置索引
  • reset_index : 进行重置

4.索引的变形

  • reindex:用来扩展表格
  • reindex_like:其功能是仿照传入的表的索引来进行被调用表索引的变形
原文地址:https://www.cnblogs.com/zwrAI/p/14176045.html