美文网首页
第三章 索引

第三章 索引

作者: 陈易男 | 来源:发表于2020-12-22 20:16 被阅读0次
整章知识架构

一、索引器

索引器
  1. 通过表索引对表进行列索引
df['column_name']
df.column_name
df[['c1', 'c2']]
  1. 对于序列的行索引有字符串索引和整数索引两种方式
s['a'] # s是以字符串为索引的Series
s[1] # s是以整型为索引的Series
  1. 对DaFrame的行索引具有lociloc两种方式,分别是元素索引和位置索引。这两种方式也可以对Series使用
df.loc['index']
df.loc[['ind1', 'ind2']]
df.iloc[1]
df.iloc[1:2]

【练一练】

select_dtypes是一个实用函数,它能够从表中选出相应类型的列,若要选出所有数值型的列,只需使用.select_dtypes('number'),请利用布尔列表选择的方法结合DataFramedtypes属性在learn_pandas数据集上实现这个功能。

# 使用.loc结合布尔条件索引的方法
def select_dtypes(df,_type):
    if _type in ['number']:
        is_int = df.dtypes == int
        is_float = df.dtypes == float
        is_number = is_int | is_float
        ret = df.loc[:, is_number]
    elif _type in ['int']:
        is_int = df.dtypes == int
        ret = df.loc[:, is_int]
    elif _type in ['float']:
        is_float = df.dtypes == float
        ret = df.loc[:, is_float]
    return ret if ret.shape[1] > 0 else None
print(select_dtypes(df, 'number').columns)
print(select_dtypes(df, 'float').columns)
print(select_dtypes(df, 'int'))
  1. 通过 query方法使用查询表达式来进行数据查询
df.query('((School == "Fudan University")&'
         ' (Grade == "Senior")&'
         ' (Weight > 70))|'
         '((School == "Peking University")&'
         ' (Grade != "Senior")&'
         ' (Weight > 80))')
  1. 通过sample函数可以对表进行随机抽样
df_sample.sample(3, replace = True, weights = df_sample.value)

二、多级索引

多级索引
# from_tuples
my_tuple = [('a','cat'),('a','dog'),('b','cat'),('b','dog')]
pd.MultiIndex.from_tuples(my_tuple, names=['First','Second'])
# from_arrays
my_array = [list('aabb'), ['cat', 'dog']*2]
pd.MultiIndex.from_arrays(my_array, names=['First','Second'])
# from_product
my_list1 = ['a','b']
my_list2 = ['cat','dog']
pd.MultiIndex.from_product([my_list1, my_list2], names=['First','Second'])

三、索引的常用方法

索引的常用方法

【练一练】

尝试在rename_axis中使用函数完成与例子中一样的功能。

df_ex.rename_axis(index=lambda x: str.upper(x)).head()

四、索引运算

索引运算

五、练习

Ex1:公司员工数据集

现有一份公司员工数据集:


dataset
  1. 分别只使用queryloc选出年龄不超过四十岁且工作部门为DairyBakery的男性。
  2. 选出员工ID号 为奇数所在行的第1、第3和倒数第2列。
  3. 按照以下步骤进行索引操作:
  • 把后三列设为索引后交换内外两层
  • 恢复中间一层
  • 修改外层索引名为Gender
  • 用下划线合并两层行索引
  • 把行索引拆分为原状态
  • 修改索引名为原表名称
  • 恢复默认索引并将列保持为原表的相对位置
# 问题1
dpt = ['Dairy', 'Bakery']
df.loc[(df.age<=40)&df.department.isin(dpt)&(df.gender=='M')].head(3)
# 问题2
df.iloc[(df.EmployeeID%2==1).values,[0,2,-2]].head()
# 问题三
# 把后三列设为索引
df_ = df.set_index(['department', 'job_title', 'gender'])
# 交换内外两层
df_ = df_.swaplevel(0,2, axis=0)
# 恢复中间一层
df_ = df_.reset_index(level=1, drop=False)
# 把外层索引名改为Gender
df_.rename_axis(index={'gender':'Gender'})
# 用下划线合并两层索引
df_.index = df_.index.map(lambda x:'_'.join(x))
# 拆分为原状态
df_.index = df_.index.map(lambda x:tuple(x.split('_')))
# 修改索引名为原表名称
df_ = df_.rename_axis(index=['gender','department'])
# 恢复默认
df_ = df_.reset_index().reindex(df.columns, axis=1)

Ex2:巧克力数据集

现有一份关于巧克力评价的数据集:

  1. 把列索引名中的\n替换为空格。
  2. 巧克力Rating评分为1至5,每0.25分一档,请选出2.75分及以下且可可含量Cocoa Percent高于中位数的样本。
  3. Review DateCompany Location设为索引后,选出Review Date在2012年之后且Company Location不属于France, Canada, Amsterdam, Belgium的样本。
# 将\n替换为空格
df.columns = [' '.join(i.split('\n')) for i in df.columns]
# 挑选
df['Cocoa Percent'] = df['Cocoa Percent'].apply(lambda x:float(x[:-1])/100)
df.query('(Rating<3)&(`Cocoa Percent`>`Cocoa Percent`.median())').head(3)
idx = pd.IndexSlice
exclude = ['France', 'Canada', 'Amsterdam', 'Belgium']
# 将Review Date和Company Location设置为索引
res = df.set_index(['Review Date', 'Company Location']).sort_index(level=0)
res.loc[idx[2012:,~res.index.get_level_values(1).isin(exclude)],:].head(3)

相关文章

  • Elasticsearch:索引,映射,文档操作

    摘要:Elasticsearch《Elasticsearch搜索引擎构建入门与实战》第三章读书笔记 索引操作 索引...

  • 设计数据密集型应用(3):Storage and Retriev

    第三章主要介绍可持久化的数据索引——主流的可持久化数据索引有下面几种: Hash Index。 LSM-Tree。...

  • 第三章 索引

    一、索引器 通过表索引对表进行列索引 对于序列的行索引有字符串索引和整数索引两种方式 对DaFrame的行索引具有...

  • 女人似水 (20)

    上一章节 内容简介与索引 女人似水 (三)10 第三章 少女是滴滋润的露 10 “宿舍”...

  • Python3.5笔记——第3章 列表与元组

    Python 3.5笔记 第三章 列表与元组 通用序列操作 索引 序列是Python中最基本的数据结构。序列中的每...

  • 女人似水 (15)

    上一章节 内容简介与索引 女人似水 (三)5 第三章 少女是滴滋润的露 5 踩着勇哥黑色尖头...

  • 女人似水 (17)

    上一章节 内容简介与索引 女人似水 (三)7 第三章 少女是滴滋润的露 7 村里原来的“村公所”...

  • 10.22 python学习(二)函数使用

    继续学习python基础教程。 第三章 使用字符串 基本字符串操作:索引,分片,乘,判断成员, 求长度,max,m...

  • 女人似水 (16)

    上一章节 内容简介与索引 女人似水 (三)6 第三章 少女是滴滋润的露 6 时间在不知不觉中...

  • 女人似水 (18)

    上一章节 内容简介与索引 女人似水 (三)8 第三章 少女是滴滋润的露 8 二泽和妈妈、姐姐三...

网友评论

      本文标题:第三章 索引

      本文链接:https://www.haomeiwen.com/subject/uxtenktx.html