本篇文章主要讲一讲python的pandas库的一些使用(也算自己学习当中的整理):
数据分析的搭配环境,大家可以去参照安装下载好:https://blog.csdn.net/m0_53088614/article/details/110948964
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整理后,字典的键将作为数据的列索引值。
关于pandas的大致的介绍就到这了,有不恰当的地方,还请指正。