概述
原标题:pandas入门:Series、DataFrame、Index基本操作都有了!
导读:pandas是一款开放源码的BSD许可的Python库。它基于NumPy创建,为Python编程语言提供了高性能的、易于使用的数据结构和数据分析工具。
pandas应用领域广泛,包括金融、经济、统计、分析等学术和商业领域。本文将介绍pandas中Series、DataFrame、Index等常用类的基本用法。
作者:李明江 张良均 周东平 张尚佳
来源:大数据DT(ID:hzdashuju)
pandas提供了众多类,可满足不同的使用需求,其中常用的类如下所示。
Series:基本数据结构,一维标签数组,能够保存任何数据类型
DataFrame:基本数据结构,一般为二维数组,是一组有序的列
Index:索引对象,负责管理轴标签和其他元数据(比如轴名称)
groupby:分组对象,通过传入需要分组的参数实现对数据分组
Timestamp:时间戳对象,表示时间轴上的一个时刻
Timedelta:时间差对象,用来计算两个时间点的差值
在这6个类中,Series、DataFrame和Index是使用频率最高的类。
01 Series
Series由一组数据以及一组与之对应的数据标签(即索引)组成。Series对象可以视作一个NumPy的ndarray,因此许多NumPy库函数可以作用于Series。
1. 创建Series
创建Series对象的函数是Series,它的主要参数是data和index,其基本语法格式如下。
classpandas. Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
Series函数常用的参数及其说明如下所示。
data:接收array或dict。表示接收的数据。默认为None
index:接收array或list。表示索引,它必须与数据长度相同。默认为None
name:接收string或list。表示Series对象的名称。默认为None
Series本质上是一个ndarray,通过ndarray创建Series对象,如代码清单6-1所示。
代码清单6-1 通过ndarray创建Series
importpandas aspd
importnumpy asnp
print( '通过ndarray创建的Series为:n',
pd.Series(np.arange( 5), index = [ 'a', 'b', 'c', 'd', 'e'], name = 'ndarray'))
输出:
通过ndarray创建的Series为:
a 0
b 1
c 2
d 3
e 4
Name: ndarray, dtype: int32
若数据存放于一个dict中,则可以通过dict创建Series,此时dict的键名(key)作为Series的索引,其值会作为Series的值,因此无须传入index参数。通过dict创建Series对象,如代码清单6-2所示。
代码清单6-2 通过dict创建Series
dit = { 'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}
print( '通过dict创建的Series为:n', pd.Series(dit))
输出:
通过dict创建的Series为:
a 0
b 1
c 2
d 3
e 4
dtype: int64
通过list创建Series,类似于通过ndarray创建Series,如代码清单6-3所示。
代码清单6-3 通过list创建Series
list1 = [ 0, 1, 2, 3, 4]
print( '通过list创建的Series为:n', pd.Series(list1, index = [ 'a', 'b', 'c', 'd', 'e'], name = 'list'))
输出:
通过list创建的Series为:
a 0
b 1
c 2
d 3
e 4
Name: list, dtype: int64
Series拥有8个常用属性,如下所示。
values:以ndarray的格式返回Series对象的所有元素
index:返回Series对象的索引
dtype:返回Series对象的数据类型
shape:返回Series对象的形状
nbytes:返回Series对象的字节数
ndim:返回Series对象的维度
size:返回Series对象的个数
T:返回Series对象的转置
访问Series的属性,如代码清单6-4所示。
代码清单6-4 访问Series的属性
series = pd.Series(list1, index = [ 'a', 'b', 'c', 'd', 'e'], name = 'list')
print( '数组形式返回Series为:', series.values)
#输出:数组形式返回Series为: [0 1 2 3 4]
print( 'Series的Index为:', series.index)
#输出:Series的Index为:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
print( 'Series的形状为:', series.shape)
#输出:Series的形状为: (5,)
print( 'Series的维度为:', series.ndim)
#输出:Series的维度为:1
2. 访问Series数据
索引与切片是Series最常用操作之一。通过索引位置访问Series的数据与ndarray相同,如代码清单6-5所示。
代码清单6-5 通过索引位置访问Series数据子集
print( 'Series位于第1位置的数据为:', series[ 0])
输出:
Series位于第 1位置的数据为: 0
相比ndarray,通过索引名称(标签)也可以访问Series数据,如代码清单6-6所示。
代码清单6-6 通过索引名称访问Series数据
print( 'Series中Index为a的数据为:', series[ 'a'])
输出:
Series中Index为a的数据为: 0
此外,也可通过bool类型的Series、list或array访问Series数据,如代码清单6-7所示。
代码清单6-7 通过bool数组访问Series数据
bool = (series < 4)
print( 'bool类型的Series为:n', bool)
输出:
bool类型的Series为:
a True
b True
c True
d True
e False
Name: list, dtype: bool
print( '通过bool数据访问Series结果为:n', series[bool])
输出:
通过bool数据访问Series结果为:
a 0
b 1
c 2
d 3
Name: list, dtype: int64
3. 更新、插入和删除
更新Series的方法十分简单,采用赋值的方式对指定索引标签(或位置)对应的数据进行修改即可,如代码清单6-8所示。
代码清单6-8 更新Series
# 更新元素
series[ 'a'] = 3
print( '更新后的Series为:n', series)
输出:
更新后的Series为:
a 3
b 1
c 2
d 3
e 4
Name: list, dtype: int64
类似list,通过append方法能够在原Series上插入(追加)新的Series。若只在原Series上插入单个值,则采用赋值方式即可,如代码清单6-9所示。
代码清单6-9 追加Series和插入单个值
series1 = pd.Series([ 4, 5], index = [ 'f', 'g'])
# 追加Series
print( '在series插入series1后为:n', series.append(series1))
输出:
在series插入series1后为:
a 3
b 1
c 2
d 3
e 4
f 4
g 5
dtype: int64
# 新增单个数据
series1[ 'h'] = 7
print( '在series1插入单个数据后为:n', series1)
输出:
在series1插入单个数据后为:
f 4
g 5
h 7
dtype: int64
一般使用drop方法删除Series元素,它接收被删除元素对应的索引,inplace=True表示对原Series起作用,如代码清单6-10所示。
代码清单6-10 删除Series元素
# 删除数据
series.drop( 'e', inplace = True)
print( '删除索引e对应数据后的series为:n', series)
输出:
删除索引e对应数据后的series为:
a 3
b 1
c 2
d 3
Name: list, dtype: int64
02 DataFrame
DataFrame是pandas基本数据结构,类似数据库中的表。DataFrame既有行索引,也有列索引,它可以看作Series组成的dict,每个Series看作DataFrame的一个列。
1. 创建DataFrame
DataFrame函数用于创建DataFrame对象,其基本语法格式如下。
classpandas. DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
DataFrame函数常用的参数及其说明如下所示。
data:接收ndarray,dict,list或DataFrame。表示输入数据。默认为None
index:接收Index,ndarray。表示索引。默认为None
columns:接收Index,ndarray。表示列标签(列名)。默认为None
创建DataFrame的方法有很多,常见的一种是传入一个由等长list或ndarray组成的dict。若没有传入columns参数,则传入的dict的键会被当作列名,如代码清单6-11所示。
代码清单6-11 通过dict创建DataFrame
dict1 = { 'col1': [ 0, 1, 2, 3, 4], 'col2': [ 5, 6, 7, 8, 9]}
print( '通过dict创建的DataFrame为:n', pd.DataFrame(dict1, index = [ 'a', 'b', 'c', 'd', 'e']))
输出:
通过dict创建的DataFrame为:
col1 col2
a 05
b 16
c 27
d 38
e 49
通过list或ndarray也可创建DataFrame,如代码清单6-12所示。
代码清单6-12 通过list创建DataFrame
list2 = [[ 0, 5], [ 1, 6], [ 2, 7], [ 3, 8], [ 4, 9]]
print( '通过list创建的DataFrame为:n',
pd.DataFrame(list2, index = [ 'a', 'b', 'c', 'd', 'e'], columns = [ 'col1', 'col2']))
输出:
通过list创建的DataFrame为:
col1 col2
a 05
b 16
c 27
d 38
e 49
由于DataFrame是二维数据结构,包含列索引(列名),因此较Series有更多的属性。DataFrame常用的属性及其说明如下所示。
values:以ndarray的格式返回DataFrame对象的所有元素
index:返回DataFrame对象的Index
columns:返回DataFrame对象的列标签
dtypes:返回DataFrame对象的数据类型
axes:返回DataFrame对象的轴标签
ndim:返回DataFrame对象的轴尺寸数
size:返回DataFrame对象的个数
shape:返回DataFrame对象的形状
访问创建的DataFrame的常用属性,如代码清单6-13所示。
代码清单6-13 访问DataFrame的属性
df = pd.DataFrame({ 'col1': [ 0, 1, 2, 3, 4], 'col2': [ 5, 6, 7, 8, 9]},
index = [ 'a', 'b', 'c', 'd', 'e'])
print( 'DataFrame的Index为:', df.index)
#输出:DataFrame的Index为:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
print( 'DataFrame的列标签为:', df.columns)
#输出:DataFrame的列标签为:Index(['col1', 'col2'], dtype='object')
print( 'DataFrame的轴标签为:', df.axes)
#输出:DataFrame的轴标签为: [Index(['a', 'b', 'c', 'd', 'e'], dtype='object'), Index(['col1', 'col2'], dtype='object')]
print( 'DataFrame的维度为:', df.ndim)
#输出:DataFrame的维度为:2
print( 'DataFrame的形状为:', df.shape)
#输出:DataFrame的形状为: (5, 2)
2. 访问DataFrame首尾数据
head和tail方法用于访问DataFrame前n行和后n行数据,默认返回5行数据,如代码清单6-14所示。
代码清单6-14 访问DataFrame前后n行数据
print( '默认返回前5行数据为:n', df.head)
输出:
默认返回前 5行数据为:
col1 col2
a 05
b 16
c 27
d 38
e 49
print( '返回后3行数据为:n', df.tail( 3))
输出:
返回后 3行数据为:
col1 col2
c 27
d 38
e 49
3. 更新、插入和删除
类似Series,更新DataFrame列也采用赋值的方法,对指定列赋值即可,如代码清单6-15所示。
代码清单6-15 更新DataFrame
# 更新列
df[ 'col1'] = [ 10, 11, 12, 13, 14]
print( '更新列后的DataFrame为:n', df)
输出:
更新列后的DataFrame为:
col1 col2
a 105
b 116
c 127
d 138
e 149
插入列也可以采用赋值方法,如代码清单6-16所示。
代码清单6-16 采用赋值的方法插入列
# 插入列
df[ 'col3'] = [ 15, 16, 17, 18, 19]
print( '插入列后的DataFrame为:n', df)
输出:
插入列后的DataFrame为:
col1 col2 col3
a 10515
b 11616
c 12717
d 13818
e 14919
删除列的方法有多种,如del、pop、drop等。常用的是drop方法,它可以删除行或者列,基本语法格式如下。
DataFrame.drop(labels, axis= 0, level= None, inplace= False, errors= 'raise')
drop方法常用的参数及其说明如下所示。
labels:接收string或array。表示删除的行或列的标签。无默认值
axis:接收0或1。表示执行操作的轴向,其中0表示删除行,1表示删除列。默认为0
levels:接收int或者索引名。表示索引级别。默认为None
inplace:接收bool。表示操作是否对原数据生效。默认为False
使用drop方法删除数据,如代码清单6-17所示。
代码清单6-17 使用drop方法删除数据
# 删除列
df.drop([ 'col3'], axis = 1, inplace = True)
print( '删除col3列后的DataFrame为:n', df)
输出:
删除col3列后的DataFrame为:
col1 col2
a 105
b 116
c 127
d 138
e 149
# 删除行
df.drop( 'a', axis = 0, inplace = True)
print( '删除a行后的DataFrame为:n', df)
输出:
删除a行后的DataFrame为:
col1 col2
b 116
c 127
d 138
e 149
03 Index
Index对象为其余pandas对象存储轴标签、管理轴标签和其他元数据(如轴名称)。创建Series或DataFrame等对象时,索引都会被转换为Index对象。主要Index对象及其说明如下所示。
Index:一般的Index对象
MultiIndex:层次化Index对象
DatetimeIndex:Timestamp索引对象
PeriodIndex:Period索引对象
1. 创建Index
Index对象可以通过pandas.Index函数创建,也可以通过创建数据对象Series、DataFrame时接收index(或column)参数创建,前者属于显式创建,后者属于隐式创建。隐式创建中,通过访问index(或针对DataFrame的column)属性即得到Index。创建的Index对象不可修改,保证了Index对象在各个数据结构之间的安全共享。Series的索引是一个Index对象。访问Series索引,如代码清单6-18所示。
代码清单6-18 访问Series索引
print( 'series的Index为 :n', series.index)
输出:
series的Index为 :
Index([ 'a', 'b', 'c', 'd'], dtype= 'object')
Index对象常用的属性及其说明如下所示。
is_monotonic:当各元素均大于前一个元素时,返回True
is_unique:当Index没有重复值时,返回True
访问Index属性,如代码清单6-19所示。
代码清单6-19 访问Index属性
print( 'series中Index各元素是否大于前一个:', series.index.is_monotonic)
#输出:series中Index各元素是否大于前一个:True
print( 'series中Index各元素是否唯一:', series.index.is_unique)
#输出:series中Index各元素是否唯一:True
2. 常用方法
Index对象的常用方法及其说明如下所示。
append:连接另一个Index对象,产生一个新的Index
difference:计算两个Index对象的差集,得到一个新的Index
intersection:计算两个Index对象的交集
union:计算两个Index对象的并集
isin:计算一个Index是否在另一个Index,返回bool数组
delete:删除指定Index的元素,并得到新的Index
drop:删除传入的值,并得到新的Index
insert:将元素插入到指定Index处,并得到新的Index
unique:计算Index中唯一值的数组
应用Index对象的常用方法如代码清单6-20所示。
代码清单6-20 应用Index对象的常用方法
index1 = series.index
index2 = series1.index
print( 'index1连接index2后结果为:n', index1.append(index2))
#输出:index1连接index2后结果为:
# Index(['a', 'b', 'c', 'd', 'f', 'g', 'h'], dtype='object')
print( 'index1与index2的差集为:', index1.difference(index2))
#输出:index1与index2的差集为:Index(['a', 'b', 'c', 'd'], dtype='object')
print( 'index1与index2的交集为:', index1.intersection(index2))
#输出:index1与index2的交集为:Index([], dtype='object')
print( 'index1与index2的并集为:n', index1.union(index2))
#输出:index1与index2的并集为:
# Index(['a', 'b', 'c', 'd', 'f', 'g', 'h'], dtype='object')
print( 'index1中的元素是否在index2中:', index1.isin(index2))
#输出:index1中的元素是否在index2中: [False False False False]
本文摘编自《Python3智能数据分析快速入门》,经出版方授权发布。返回搜狐,查看更多
责任编辑:
最后
以上就是贪玩狗为你收集整理的python dataframe index函数_pandas入门:Series、DataFrame、Index基本操作都有了!的全部内容,希望文章能够帮你解决python dataframe index函数_pandas入门:Series、DataFrame、Index基本操作都有了!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复