1.Pandas提供的数据结构和函数的设计,将使表格数据的工作快速、简单、更易懂。所以利用Pandas进行数据操作、预处理、清洗是Python数据分析中的重要技能。
常见的数据存储形式有Excel和数据库这两种,不管是Excel还是数据库他们存储数据的方式都是以表格样式进行存储,有行、有列,并且每一行和每一列都有自己的索引
例如:name,age等这些就是列索引,可以方便我们获取数据。很不巧的是我们Pandas的DataFrame的结构就和他们相同,Series的结构和表中的行的结构也相同
。上代码演示:
# 导入pandas模块 import pandas as pd #通过Series存储每个英雄的基本信息 #创建Series s1 = pd.Series([1,'盖伦','18','150.0','男']) s2 = pd.Series([2,'乐芙兰','19','160.0','女']) s3 = pd.Series([3,'亚索','20','170.0','男']) s4 = pd.Series([4,'鳄鱼','21','180.0','男']) s5 = pd.Series([5,'克烈','22','190.0','男']) series_list=[s1,s2,s3,s4,s5] #创建一个DataFrame对象存储通讯录 df=pd.DataFrame(series_list) # 打印出构造的DataFrame print(df)
看着很复杂,但是别慌,慢慢来~~
根据打印的结果我们来进一步分析
整个数据被分为三部分:行索引(index),列索引(columns)及数据内容(data).
但是当行和列索引的值没被定义的时候,会被默认为0~n,索引就是为了更好的查询资料。接下来解析一下series
Series是Pandas中最基本的对象,Series类似一种一维数组, 能为数据自定义标签,也就是行索引(index)我们来创建一个series看看效果:
# 导入Series from pandas import Series,DataFrame # 创建Series,使用默认索引 sel = Series(data=['cahngzhang','uzi','xiaotian','xiye','pdd']) print(sel)
0 cahngzhang 1 uzi 2 xiaotian 3 xiye 4 pdd dtype: object
一个Series其实就是一条数据,Series方法的第一个参数是data,第二个参数是index(索引),但是上述代码没有,所以会传默认值0~n.
那么接下来自定义一下我们的行索引.
# 导入Series from pandas import Series,DataFrame # 创建Series,使用自定义索引 sel = Series(data=['cahngzhang','uzi','xiaotian','xiye','pdd'], index = ['1','3','5','7','8']) print(sel)
1 cahngzhang 3 uzi 5 xiaotian 7 xiye 8 pdd dtype: object
index参数就是我们的行索引值,要注意的是:参数值的个数一定要和data数相同。
在创建Series时数据并不一定要是列表,也可以将一个字典传进去。
from pandas import Series,DataFrame # 将字典转换为Series dic={"red":100,"black":400,"green":300,"pink":900} se2=Series(data=dic) print(se2)
red 100 black 400 green 300 pink 900 dtype: int64
当数据是字典的时候,会将字典的键作为索引,字典的值作为索引对应的数据值。(我个人喜欢这种方式来写代码,方便理解~)
**二.**DataFrame的创建:
**DataFrame(数据表)**是一种 2 维数据结构,数据以表格的形式存储,分成若干行和列。通过 DataFrame,你能很方便地处理数据。
调用DataFrame()可以将多种格式的数据转换为DataFrame对象,它的的三个参数data、index和columns分别为数据、行索引和列索引。
我们现在就用pandas帮忙常见一套lol王者之师吧。
from pandas import Series,DataFrame # 创建二维列表存储选手信息 lol_list = [['上单','TheShy',20], ['打野','小天',19], ['中单','Faker',23], ['ADC','Uzi',22], ['辅助','Ming',21]] # 创建dataframe df = DataFrame(data=lol_list) print(df)
结果如下
0 1 2 0 上单 TheShy 20 1 打野 小天 19 2 中单 Faker 23 3 ADC Uzi 22 4 辅助 Ming 21
好了,您已经成功的创建出一个英雄联盟王者之师,我们再来一起阅读下这段代码。
lol_list是使用一个二维列表,将每一个队员的信息存储到一个列表中。
调用DataFrame()将二维列表转换为DataFrame对象,行列索引使用的是默认0-N数字代表。
有没有办法在创建DataFrame对象的时候为每一列设定一个有意义的名字呢?
我们可以通过给DataFrame构造函数中的参数index,columns传值,来设定DataFrame的中的行列索引的值。
from pandas import Series,DataFrame # 创建二维列表存储选手信息 lol_list = [['上单','TheShy',20], ['打野','小天',19], ['中单','Faker',23], ['ADC','Uzi',22], ['辅助','Ming',21]] # 创建dataframe df = DataFrame(data=lol_list, index=['a','b','c','d','e'], columns=['位置','ID号','年龄']) print(df)
效果如下
位置 ID号 年龄 a 上单 TheShy 20 b 打野 小天 19 c 中单 Faker 23 d ADC Uzi 22 e 辅助 Ming 21
大家可以对比这两个代码,可以发现第二个可以看到每一列或者每一行都有了一个名字。
当然我们也可以使用字典来创建一个DataFrame数据。
from pandas import Series,DataFrame import pandas as pd # 使用字典创建 dic={ '位置': ['上单', '打野', '中单', 'ADC','辅助'], 'ID号': ['TheShy', '小天', 'Faker', 'Uzi', 'Ming'], 'year': [20, 19, 23, 22,21]} df=pd.DataFrame(dic) print(df)
效果和上一个相同。通过结果可以看出当字典格式的数据被dataframe整理后,字典的键将作为数据的列索引值