首页 > 编程知识 正文

dataframe是什么,python pandas教程

时间:2023-05-03 13:25:11 阅读:121045 作者:3559

Pandas是为解决数据分析任务而创建的基于NumPy的工具。 Pandas内置了大量库和几个标准数据模型,为高效处理大型数据集提供了必要的工具。 Pandas提供了许多函数和方法,可以快速轻松地处理数据。 利用Pandas进行数据操作、预处理和清洗是Python数据分析的重要技能。

数据分为三个部分:行索引(index )、列索引(columns )和数据内容(data )

塞利兹

Series是Pandas中最基本的对象,Series就像一维数组。 事实上,Series基本上基于NumPy数组对象。 与NumPy数组不同,Series可以自定义数据标签,即索引(index ),并通过索引访问数组中的数据。

创建Series并使用默认索引

sel=series (数据=[ 1,' lackychen ',30,' a teacher and a student'] ' )

Series实际上是数据。 Series方法的第一个参数是data,第二个参数是index (索引),如果未传递值,则使用默认值(0-N )。

创建序列并使用自定义索引

SEL=series(data=[1,' lackychen ',30,' a teacher and a student'] ),index=[ '序号','名称','年龄','注释]

索引参数是我们自定义的索引值。 请注意,参数值的数量必须与元素的数量相同。

将词典转换为系列

dic={'red':100,' black':400,' green':300,' pink':900}

se2=series (数据=DIC ) )。

在数据为辞典的情况下,将辞典的键设为索引,将辞典的值设为与索引对应的数据值。

Series是一组索引数组,与list相似,通常用于存储单个数据或单行数据。 多个系列可以配置一个数据帧。

从values、index、items等系列属性中获取各部分的所有数据

from pandas导入系列

emp=['001、002、003、004、005、006']

name=[ '亚瑟','后裔','小乔','漂亮的鸟','虞姬','王昭君' ]

series=series (数据=name,索引=EMP ) ) )。

#获取数据值

打印(series.values ) )。

获取索引的值

print(series.index.tolist ) )

#获取索引/值对

打印(list (series.items ) )

values、index和items分别返回列表、索引和Zip类型的数据。 为了方便地观察数据,可以使用series.index.toList ()和List (series.items ) ) )的方法将其转换为list

Series就像一个将索引值暴露在外面的列表,实际上不仅外观相似,而且在检索数据方面也非常相似。 可以使用索引值访问单个数据。 此外,还可以使用切片选择多个数据。

from pandas导入系列

emp=['001、002、003、004、005、006']

name=[ '亚瑟','后裔','小乔','漂亮的鸟','虞姬','王昭君' ]

series=series (数据=name,索引=EMP ) ) )。

#使用索引值获取单个数据

print(series['001']

#使用索引值获取多个不连续的数据

print ('索引下标',series[['002 ',' 004']]

#使用切片获取连续的数据

print ('索引切片',series('001':'004 ' ) )

from pandas导入系列

emp=['001、002、003、004、005、006']

name=[ '亚瑟','后裔','小乔','漂亮的鸟','虞姬','王昭君' ]

series=series (数据=EMP,索引=名称) )。

#使用位置下标获取各个数据

打印(series [0] ) )。

#使用位置下标获取多个不连续的数据

print ('位置下标',series [ [ 1,3 ] ) )

#使用位置下标切片获取连续数据

print (位置切片)、series[0:3]

我们自定义的索引值称为索引下标,如果未设置索引值,则有一个称为定位下标的默认值。

利用循环遍历系列

直接遍历Series的值:

# 遍历并拿到data数据

for value in series:

print(value)

通过keys()遍历Series的索引:

# 遍历并拿到index数据

for index in series.keys():

print(index)

通过items()遍历Series的每对索引和数据:

# 遍历并拿到每对索引和数据

for item in series.items():

print(item)

DataFrame

DataFrame(数据表)是一种 2 维数据结构,数据以表格的形式存储,分成若干行和列。通过 DataFrame,你能很方便地处理数据。调用DataFrame()可以将多种格式的数据转换为DataFrame对象,它的的三个参数data、index和columns分别为数据、行索引和列索引。

二维列表创建dataframe

lol_list = [ ['上单','zzdbmh',20], ['打野','小天',19], ['中单','wxdxrk',23], ['ADC','俏皮的路灯',22], ['辅助','Ming',21] ]

df = DataFrame(data=lol_list)

有没有办法在创建DataFrame对象的时候为每一列设定一个有意义的名字呢?我们可以通过给DataFrame构造函数中的参数index,columns传值来设定DataFrame的中的行、列索引的值。

二维列表创建dataframe,自定义index、columns

lol_list = [ ['上单','zzdbmh',20], ['打野','小天',19], ['中单','wxdxrk',23], ['ADC','俏皮的路灯',22], ['辅助','Ming',21] ]

df = DataFrame(data=lol_list, index=['a','b','c','d','e'], columns=['位置','ID号','年龄'])

使用字典创建dataframe,字典的键值作为数据的列索引值

dic={ '位置': ['上单', '打野', '中单', 'ADC','辅助'], 'ID号': ['zzdbmh', '小天', 'wxdxrk', '俏皮的路灯', 'Ming'], 'year': [20, 19, 23, 22,21]}

df=pd.DataFrame(dic)

可以把 DataFrame 理解成一组采用同样索引的 Series 的集合。DataFrame处理数据常见的操作有选取、替换行或列的数据,重组数据表、修改索引、多重筛选等。

DataFrame里的数据是按照行和列来进行排列,如何对DataFrame的数据按照行或者列进行选择、遍历以及修改。在这之前我们要清楚DataFrame中的数据情况,首先数据的维度是一维还是二维的我们可以使用ndim查看,数据的行数和列数使用shape查看,行、列的索引值使用index、columns查看。

import pandas as pd

df_dict = {

'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],

'age':['18','20','19','22'],

'weight':['50','55','60','80']

}

df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])

print(df)

# 获取行数和列数

print(df.shape)

# 获取行索引

print(df.index.tolist())

# 获取列索引

print(df.columns.tolist())

# 获取数据的维度

print(df.ndim)

数据量比较大并且我们想看数据的具体情况的时候,直接打印df比较耗时,所以我们可以只获取前几行或者后几行,了解数据的构成即可。这时候有两个法宝head()、tail()帮我们解决这个问题。

# 获取前两条

df.head(2)

# 获取后两条

df.tail(2)

两个方法都有默认值,默认值是5,当然也可以自己设置,如果数据不够5个会将全部数据拿出来。

# 通过位置索引切片获取一行

print(df[0:1])

# 通过位置索引切片获取多行

print(df[1:3])

# 获取多行里面的某几列

print(df[1:3][['name','age']])

# 获取DataFrame的列

print(df['name'])

# 获取多个列

print(df[['name','age']])

df[]不支持直接输入标签索引获取行数据,例如:df['001'];

这种方式可以获取一列数据,列如:df['name'];

如果想获取多行里面的某几列可写成:df[行][列],例如:df[1:3][['name','age']],将列索引值放到同一个列表中,再将列表放到第二个方括号中。

行标签索引筛选loc[],行位置索引筛选iloc[]:

import pandas as pd

df_dict = {

'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],

'age':['18','20','19','22'],

'weight':['50','55','60','80']

}

df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])

print(df)

# 获取某一行某一列的数据

print(df.loc['001','name'])

# 某一行多列的数据

print(df.loc['001',['name','weight']])

# 一行所有列

print(df.loc['001',:])

# 选择间隔的多行多列

print(df.loc[['001','003'],['name','weight']])

# 选择连续的多行和间隔的多列

print(df.loc['001':'003','name':'weight'])

df.loc[] 通过标签索引获取行数据,它的语法结构是这样的:df.loc[[行],[列]],方括号中用逗号分隔,左侧是行、右侧是列。注意:如果行或者列使用切片的时候,要把方括号去掉,列df.loc['001':'003','name':'weight']。

df.iloc[] 通过位置索引获取行数据,他的操作和loc[]操作是一样的,只要将标签索引改成位置索引就好了。

# 取一行

print(df.iloc[1])

# 取连续多行

print(df.iloc[0:2])

# 取间断的多行

print(df.iloc[[0,2],:])

# 取某一列

print(df.iloc[:,1])

# 某一个值

print(df.iloc[1,0])

import pandas as pd

df_dict = {

'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],

'age':['18','20','19','22'],

'weight':['50','55','60','80']

}

df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])

print(df)

print(df.iloc[1])

print(df.iloc[0:2])

print(df.iloc[[0,2],:])

print(df.iloc[:,1])

print(df.iloc[1:3,0:1])

print(df.iloc[1,0])

需要注意的是,loc和iloc的切片操作在是否包含切片终点的数据有差异。loc['001':'003']的结果中包含行索引003对应的行。iloc[0:2] 结果中不包含序号为2的数据,切片终点对应的数据不在筛选结果中。loc是指location的意思,iloc中的i是指integer。这两者的区别如下:

loc:works on labels in the index.

iloc:works on the positions in the index (so it only takes integers).

也就是说loc是根据index来索引,比如下边的df定义了一个index,那么loc就根据这个index来索引对应的行;iloc并不是根据index来索引,而是根据行号来索引,行号从0开始,逐次加1。

dataframe数据遍历

iterrows(): 按行遍历,将DataFrame的每一行转化为(index, Series)对。index为行索引值,Series为该行对应的数据。

for index,row_data in df.iterrows():

print(index,row_data)

iteritems():按列遍历,将DataFrame的每一列转化为(column, Series)对。column为列索引的值,Series为该列对应的数据。

for col,col_data in df.iteritems():

print(col)

示例:

import pandas as pd

df_dict = {

'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],

'age':['18','20','19','22'],

'weight':['50','55','60','80']

}

df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])

for index, row_data in df.iterrows():

print(index, row_data)

for col, col_data in df.iterrows():

print(col)

print(col_data)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。