4. 布尔型索引
# 布尔型索引 # 和Series原理相同 df = pd.DataFrame(np.random.rand(16).reshape(4,4)*100, index = ['one','two','three','four'], columns = ['a','b','c','d']) print(df) print('------') b1 = df < 20 print(b1,type(b1)) print(df[b1]) # 也可以书写为 df[df < 20] print('------') # 不做索引则会对数据每个值进行判断 # 索引结果保留 所有数据:True返回原数据,False返回值为NaN b2 = df['a'] > 50 print(b2,type(b2)) print(df[b2]) # 也可以书写为 df[df['a'] > 50] print('------') # 单列做判断 # 索引结果保留 单列判断为True的行数据,包括其他列 b3 = df[['a','b']] > 50 print(b3,type(b3)) print(df[b3]) # 也可以书写为 df[df[['a','b']] > 50] print('------') # 多列做判断 # 索引结果保留 所有数据:True返回原数据,False返回值为NaN b4 = df.loc[['one','three']] < 50 print(b4,type(b4)) print(df[b4]) # 也可以书写为 df[df.loc[['one','three']] < 50] print('------') # 多行做判断 # 索引结果保留 所有数据:True返回原数据,False返回值为NaN
输出为:
3.2.4 DataFrame基本操作技巧
数据查看、转置 / 添加、修改、删除值 / 对齐 / 排序
1. 数据查看、转置
# 数据查看、转置 df = pd.DataFrame(np.random.rand(16).reshape(8,2)*100, columns = ['a','b']) print(df.head(2)) print(df.tail()) # .head()查看头部数据 # .tail()查看尾部数据 # 默认查看5条 print(df.T) # .T 转置
2. 添加、修改、删除值
# 添加与修改 df = pd.DataFrame(np.random.rand(16).reshape(4,4)*100, columns = ['a','b','c','d']) # 新增列/行并赋值 df['e'] = 10 df.loc[4] = 20 # 索引后直接修改值 df['e'] = 20 df[['a','c']] = 100 # del语句 - 删除列 del df['a'] # drop()删除行,inplace=False → 删除后生成新的数据,不改变原数据 df.drop([1,2]) # drop()删除列,需要加上axis = 1,inplace=False → 删除后生成新的数据,不改变原数据 df.drop(['d'], axis = 1)
3. 排序
排序1 - 按值排序 .sort_values
pandas中可以使用sort_values()方法将Series、DataFrmae类对象按值的大小排序。
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False)
by:表示根据指定的列索引名(axis=0或’index’)或行索引名(axis=1或’columns’)进行排序。
axis:表示轴编号(排序的方向),0代表按行排序,1代表按列排序。
ascending:表示是否以升序方式排序,默认为True。若设置为False,则表示按降序方式排序。
na_position:表示缺失值的显示位置,可以取值为’first’(首位)或’last’(末位)。
排序2 - 索引排序 .sort_index
pandas中提供了一个sort_index()方法,使用sort_index()方法可以让Series类对象DataFrame类对象按索引的大小进行排序。
sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index: bool = False)
axis:表示轴编号(排序的方向),0代表按行排序,1代表按列排序。
level:表示按哪个索引层级排序,默认为None。
ascending:表示是否以升序方式排序,默认为True。若设置为False,则表示按降序方式排序。
kind:表示排序算法,可以取值为’quicksort’、 'mergesort’或’heapsort’,默认为‘quicksort’。
3.2.5 Index索引对象
1.索引对象概述
Index类的常见子类,包括MultiIndex、Int64Index、DatetimeIndex等
掌握分层索引,可以通过多种方式熟练地创建分层索引。
在创建Series类对象或DataFrame类对象时,既可以使用自动生成的整数索引,也可以使用自定义的
标签索引。无论哪种形式的索引,都是一个Index类的对象。
Index是一个基类,它派生了许多子类。
2. 索引对象操作
设置索引
In [8]: info = pd.DataFrame([('William', 'C'), ('Smith', 'Java'), ('Parker', 'Python'), ('Phill', np.nan)], index=[1, 2, 3, 4], columns=('name', 'Language')) info
输出为:
Out[8]: name Language 1 William C 2 Smith Java 3 Parker Python 4 Phill NaN
set_index() 将已存在的列标签设置为 DataFrame 行索引。除了可以添加索引外,也可以替换已经存在的索引。比如您也可以把 Series 或者一个 DataFrme 设置成另一个 DataFrame 的索引。示例如下:
In [6]: import pandas as pd import numpy as np info = pd.DataFrame({'Name': ['Parker', 'Terry', 'Smith', 'William'], 'Year': [2011, 2009, 2014, 2010], 'Leaves': [10, 15, 9, 4]}) info.set_index('Name')
输出为:
Out[6]: Year Leaves Name Parker 2011 10 Terry 2009 15 Smith 2014 9 William 2010 4
重置索引
您可以使用 reset_index() 来恢复初始行索引,示例如下:
info = pd.DataFrame([('William', 'C'), ('Smith', 'Java'), ('Parker', 'Python'), ('Phill', np.nan)], index=[1, 2, 3, 4], columns=('name', 'Language')) info
输出为:
Out[11]: name Language 1 William C 2 Smith Java 3 Parker Python 4 Phill NaN
In [13]: info.reset_index()
输出为:
Out[13]: index name Language 0 1 William C 1 2 Smith Java 2 3 Parker Python 3 4 Phill NaN
3. 使用索引对象操作数据
使用单层索引访问数据
无论是创建Series类对象还是创建DataFrame类对象,根本目的在于对Series类对象或DataFrame类对象中的数据进行处理,但在处理数据之前,需要先访问Series类对象或DataFrame类对象中的数据。
pandas中可以使用[]、loc、iloc、at和iat这几种方式访问Series类对象和DataFrame类对象的数据。
使用[]访问数据
变量[索引]
需要说明的是,若变量的值是一个Series类对象,则会根据索引获取该对象中对应的单个数据;若变量的值是一个DataFrame类对象,在使用“[索引]”访问数据时会将索引视为列索引,进而获取该列索引对应的一列数据。
使用loc和iloc访问数据pandas中也可以使用loc和iloc访问数据。
变量.loc[索引] 变量.iloc[索引]
以上方式中,"loc[索引]"中的索引必须为自定义的标签索引,而"iloc[索引]"中的索引必须为自动生成的整数索引。需要说明的是,若变量是一个DataFrame类对象,它在使用"loc[索引]"或"iloc[索引]"访问数据时会将索引视为行索引,获取该索引对应的一行数据。
使用at和iat访问数据
pandas中还可以使用at和iat访问数据,与前两种方式相比,这种方式可以访问DataFrame类对象的单个数据。
变量.at[行索引, 列索引] 变量.iat[行索引, 列索引]
以上方式中,"at[行索引, 列索引]"中的索引必须为自定义的标签索引,"iat[行索引, 列索引]"中的索引必须为自动生成的整数索引。
使用分层索引访问数据
掌握分层索引的使用方式,可以通过[]、loc和iloc访问Series类对象和DataFrame类对象的数据
pandas中除了可以通过简单的单层索引访问数据外,还可以通过复杂的分层索引访问数据。与单层索引相比,分层索引只适用于[]、loc和iloc,且用法大致相同。
使用[]访问数据
由于分层索引的索引层数比单层索引多,在使用[]方式访问数据时,需要根据不同的需求传入不同层
级的索引。
变量[第一层索引] 变量[第一层索引][第二层索引]
以上方式中,使用
变量[第一层索引]
可以访问第一层索引嵌套的第二层索引及其对应的数据;
使用
变量[第一层索引][第二层索引]
可以访问第二层索引对应的数据。
使用loc和iloc访问数据
使用iloc和loc也可以访问具有分层索引的Series类对象或DataFrame类对象。
变量.loc[第一层索引] # 访问第一层索引对应的数据 变量.loc[第一层索引][第二层索引] # 访问第二层索引对应的数据 变量.iloc[整数索引] # 访问第二层索引对应的数据
3.3 统计计算与统计描述
常见的统计计算函数