pandas中的索引和切片技巧

pandas中的索引和切片技巧

九月 30, 2019
当前设备屏幕尺寸过小,推荐使用PC模式浏览。

扩展资料: indexing-selecting-assigning

切片选择

范围选择

df为一个DataFrame,则选中 mm 行到 nn 的数据,使用df.loc[m:n](当rows的索引都为数字时)或df.iloc[m:n]

指定行/列

假设数据:

column_name_1 column_name_2 column_name_3
0 a b c
1 d e f
2 g h i

df.loc[0:2, ['column_name_1', column_name_3]] (等效于 df.loc[0:2, [0, 2]])将会选出数据:

column_name_1 column_name_3
0 a c
1 d f
2 g i
  • 即其基础格式为:loc[行索引, 列索引]

loc和iloc的差别

pandas中,lociloc的差别并不大,主要体现在两个地方:

  1. 包含性不同,locinclusively的;而ilocexcluded的,如:df.iloc[0:2]会选中第 0, 10,\ 1 行的数值;而df.loc[0:2]`会选中 0, 1, 20,\ 1, \ 2 行的数据。
  2. 意义不同;pandas中,一个DataFrame的结构分为rowscolumns,有时我们也把rows称为index(但其实际上应该称为rows);当我们使用loc函数时,必需指定的是每一列的label而不是index。例如第一列的index00,而其label为"column_name_1"(假设);iloc正好相反。
  • 我们会将以序数作为索引的方式称为Index-based,则iloc适用于这种场景,即:Index-based selection
  • 我们会将以字符串作为索引的方式称为Label-based,则loc适用于这种场景,即:Label-based selection

条件选择

可以直接使用df['column_name_1']=='something'来直接选择出适合的值;但一般还是会用loc函数来做这件事:df.loc[df['column_name_1']=='something]'

这么做看起来多此一举,实际上可以进行多种条件的组合:``df.loc[(df[‘column_name_1’]=='something) & df[‘column_name_2’ == ‘otherthing’]]`。

  • 注意是&而不是&&; 或运算符|同理。