Pandas I

Type
Lecture
算是我第一次系统的学习pandas吧,把之前实践中用的很多知识点串了起来,当然,很多功能还是需要查文档。

索引

.loc是通过标签来索引,标签包括 column label 和 row label。具体参数可以是:列表,切片,单一标签值。注意,这里的切片是左右闭合的。
.iloc 是通过下标值来索引,参数也可以是 列表,切片和单一下标。注意,这里的切片是不包括右边的,即和python原生的切片相同。
[] 只接收一个参数,该参数可以为:行下标的切片、单一列标签列标签的列表
 
关于 [] 索引,下图展示了不同的参数对应的输出,其中右下角 第一和第二的输入均为 single column label, 因此输出为 Series;第三个输入为slice,因此输出为DataFrame
关于 [] 索引数据时,不同参数的返回关于 [] 索引数据时,不同参数的返回
关于 [] 索引数据时,不同参数的返回
👉
注意:
  • 不管是 .loc 还是 .iloc 还是[]都是操作,而不是函数,因此运算符为[]
  • 一般不会使用 [] 来索引行, 有歧义。
  • 利用 .loc 或者 [] 得到的DataFrame的顺序就是按照 参数顺序来的,所以可以通过 传递 特定参数的顺序来改变 顺序。例如,根据 Name 字符串长度排序 可以有 babynames.loc[babynames["Name"].str.len().sort_values().index]
  • 除了上述三种方式之外,还可以通过 . 运算符来索引列,但此时列名不能有 空格。

数据结构

pandas 有三种数据结构,分别是 DataFrame,Series,Index,其中 DataFrame 可以看作是一系列共享 Index 的Series。
注意:Index的值可以是不唯一的,即可以重复
当索引单列数值的时候,很容易得到一个Series对象,但是此时如如果想得到 DataFrame对象,可有如下方法:
notion imagenotion image

条件选择

.loc[] 可以通过 bool 来索引。即通过 df[bool_list]df.loc[bool_list] 来选取 boollist中为True的行。
至于 bool_list 如何得到,一般有如下几种方法:
  • ==, > , < ,简单根据某列值 和 某 特定值 的关系来得到。例如
    • elections2.loc[elections["%"] > 50, ["Candidate", "Year"]]
  • .isin,判断列值是否在 某个集合中
    • a_parties = ["Anti-Masonic", "American", "Anti-Monopoly", "American Independent"] elections[elections["Party"].isin(a_parties)]
  • .str.startwith, 判断字符串是否以某字符开头
    • elections[elections["Party"].str.startswith("A")]
 
此外,还有如下两种按照条件选取的方式:
  • .query,比较复杂,可以通过 @ 关键字来获取python变量,如下例 2
    • # 例 1 elections.query('Year >= 2000 and Result == "win"') # 例 2 parties = ["Republican", "Democratic"] elections.query('Result == "win" and Party not in @parties')
  • groupby.filter

一些内置函数

  • size/shape 为属性,不是函数
  • describe
  • sample,用来抽样,通过参数来设置是否有放回。可以和别的操作进行链式操作
    • elections.query('Year == 2000') .sample(4, replace = True) .iloc[:, 0:2]
  • value_counts,对某列特征值进行计数,返回为Series
    • elections["Candidate"].value_counts()
  • uniques,查看某属性的所有取值,即去掉了重复值。返回一个numpy.ndarray
    • elections["Party"].unique()
  • sort_values, 根据某一属性进行排序
    • elections.sort_values("%", ascending = False)