Python数据分析第一课:Pandas初入门

数据分析如下所示共6步,而使用Python可以帮助我们完成前5步。
在这里插入图片描述

一. Pandas简介

Pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

了解了Pandas的基本概念,再看一下Pandas在数据分析方面有哪些作用呢?
在这里插入图片描述
Pandas提供的数据结构和函数的设计,将使表格化数据的工作快速、简单、有表现力。所以利用Pandas进行数据操作、预处理、清洗是Python数据分析中的重要技能。

二. Pandas数据结构

常见的数据存储形式有Excel和数据库这两种,他们的存储有什么共同点呢?
在这里插入图片描述
Pandas的DataFrame的结构就和他们相同,Series的结构和表中的行的结构相同。

import pandas as pd

# 通过Series存储每个英雄的基本信息
# 创建Series
s1 = pd.Series([1001,'lily','18','150.00','female'])
s2 = pd.Series([1002,'lucy','20','170.00','female'])
s3 = pd.Series([1003,'tomy','22','176.00','male'])
s4 = pd.Series([1004,'lilei','23','178.00','male'])

series_list = [s1,s2,s3,s4]
# 创建一个DataFrame对象存储通讯录
df = pd.DataFrame(series_list)
# 打印df
print(df)

# 输出结果如下:
      0      1   2       3       4
0  1001   lily  18  150.00  female
1  1002   lucy  20  170.00  female
2  1003   tomy  22  176.00    male
3  1004  lilei  23  178.00    male

我们根据df的打印结果进一步解析DataFrame的结构。
在这里插入图片描述
整个数据被分为三部分:行索引(index),列索引(columns)及数据内容(data)。

行、列索引的值在没有自定义的时候,会被默认设置上0-N的值,索引的作用就是为了更好的认知和查询数据。

可以看出每一列数据都是同种类型的数据,如果每一列设定一个有意义的名字,操作的时候就会更加方便。

三. Series的创建

Series是Pandas中最基本的对象,Series类似一种一维数组。事实上,Series 基本上就是基于 NumPy 的数组对象来的。和 NumPy 的数组不同,Series 能为数据自定义标签,也就是索引(index),然后通过索引来访问数组中的数据。

# 导入Series
from pandas import Series,DataFrame

# 创建Series,使用默认索引
se1 = Series(data=[1,'羞羞的尹志平','20','天生爱做色狼,杨过不喜欢他'])
print(se1)

# 输出结果:
0                1
1           羞羞的尹志平
2               20
3    天生爱做色狼,杨过不喜欢他
dtype: object

一个Series其实就是一条数据,Series方法的第一个参数是data,第二个参数是index(索引),如果没有传值会使用默认值(0-N)。

自定义一个索引看看。

# 导入Series
from pandas import Series,DataFrame

# 创建Series,使用自定义索引
se1 = Series(data=[1,'羞羞的尹志平','20','天生爱做色狼,杨过不喜欢他'],index=['序号','姓名','年龄','属性'])
print(se1)

# 输出结果:
序号                1
姓名           羞羞的尹志平
年龄               20
属性    天生爱做色狼,杨过不喜欢他
dtype: object

index参数是我们自定义的索引值,注意:参数值的个数一定要相同。

在创建Series时数据并不一定要是列表,也可以将一个字典传进去。

# 导入Series
from pandas import Series,DataFrame

# 将字典转换为Series
dic = {
   'name':'小龙女','属性':'超级漂亮','年龄':'29','备注':'杨过的老婆'}
se2 = Series(data=dic)
print(se2)

# 输出结果:
name      小龙女
属性       超级漂亮
年龄         29
备注      杨过的老婆
dtype: object

当数据是字典的时候,会将字典的键作为索引,字典的值作为索引对应的数据值。

综上可以看出,Series是一组带索引数组,与list相似,一般我们用其承装一条数据或者一行数据。多个Series可组成一个DataFrame。

四. DataFrame的创建

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

# 导入Series
from pandas import Series,DataFrame

# 创建二维列表,存储人物信息
list = [['杨过','神雕大侠','善于使用独臂大刀'],
        ['小龙女','神雕大侠的妻子','善于使用神雕大侠的大刀'],
        ['尹志平','神雕大侠的妻子的仇人','善于使用神雕大侠的妻子']]

# 创建dataframe
df = DataFrame(data=list)
print(df)

# 输出结果:
     0           1            2
0   杨过        神雕大侠     善于使用独臂大刀
1  小龙女     神雕大侠的妻子  善于使用神雕大侠的大刀
2  尹志平  神雕大侠的妻子的仇人  善于使用神雕大侠的妻子

list是使用一个二维列表,将每一个人物的信息存储到一个列表中。

调用DataFrame()将二维列表转换为DataFrame对象,行列索引使用的是默认0-N数字代表。

# 导入Series
from pandas import Series,DataFrame

# 创建二维列表,存储人物信息
list = [['杨过','神雕大侠','善于使用独臂大刀'],
        ['小龙女','神雕大侠的妻子','善于使用神雕大侠的大刀'],
        ['尹志平','神雕大侠的妻子的仇人','善于使用神雕大侠的妻子']]

# 创建dataframe
df = DataFrame(data=list,index=[1,2,3],columns=['姓名','称号','特长'])
print(df)

# 输出结果:
    姓名          称号           特长
1   杨过        神雕大侠     善于使用独臂大刀
2  小龙女     神雕大侠的妻子  善于使用神雕大侠的大刀
3  尹志平  神雕大侠的妻子的仇人  善于使用神雕大侠的妻子

当然我们也可以使用字典来创建一个DataFrame数据。

# 导入Series
from pandas import Series,DataFrame

# 创建字典,存储人物信息
# list = [['杨过','神雕大侠','善于使用独臂大刀'],
#         ['小龙女','神雕大侠的妻子','善于使用神雕大侠的大刀'],
#         ['尹志平','神雕大侠的妻子的仇人','善于使用神雕大侠的妻子']]

dic = {
   '姓名':['杨过','小龙女','尹志平'],
       '称号':['神雕大侠','神雕大侠的妻子','神雕大侠的妻子的仇人'],
       '特长':['善于使用独臂大刀','善于使用神雕大侠的大刀','善于使用神雕大侠的妻子']}
# 创建dataframe
df = DataFrame(dic)
print(df)
 
 # 输出结果:
     姓名          称号           特长
0   杨过        神雕大侠     善于使用独臂大刀
1  小龙女     神雕大侠的妻子  善于使用神雕大侠的大刀
2  尹志平  神雕大侠的妻子的仇人  善于使用神雕大侠的妻子

通过结果可以看出当字典格式的数据被dataframe整理后,字典的键将作为数据的列索引值。

五. Series常用属性与方法

表格数据中的每一列或者每一行的数据结构都是Series,它可以看成是一维的表格数据。

它可以属于DataFrame的一部分也可以作为一个独立的数据结构存在。

from pandas import Series

mp=['001','002','003','004','005','006']
name=['亚瑟', '后裔','小乔','哪吒' ,'虞姬','王昭君']
se = Series(data=name,index=mp)

# 获取数据的值
print(se.values)
print('-'*20)
# 获取索引的值
print(se.index.tolist())
print('-'*20)
# 获取每队数据与索引的值
print(list(se.items()))

# 输出结果:
['亚瑟' '后裔' '小乔' '哪吒' '虞姬' '王昭君']
--------------------
['001', '002', '003', '004', '005', '006']
--------------------
[('001', '亚瑟'), ('002', '后裔'), ('003', '小乔'), ('004', '哪吒'), ('005', '虞姬'), ('006', '王昭君')]

values、index、items返回的对象分别是List、Index、Zip类型的数据,为了方便我们使用和观察数据,可以使用series.index.tolist()和list(series.items())方法转化成列表类型。

Series就像将索引值暴露在外面的List,其实它们除了外表相似以外,在获取数据方面也非常的相似。我们可以通过索引值来进行单个数据的访问,同样也支持切片选择多个数据。

from pandas import Series

mp=['001','002','003','004','005','006']
name=['亚瑟', '后裔','小乔','哪吒' ,'虞姬','王昭君']
se = Series(data=name,index=mp)

# 使用索引获取单个数值
print(se['002'])
print('-'*20)
# 使用索引获取多个不连续的数值
print('索引下标')
print(se[['001','003','006']])
print('-'*20)
# 使用索引获取多个连续的数值
print('索引切片')
print(se['004':'006'])

# 输出结果:
后裔
--------------------
索引下标
001     亚瑟
003     小乔
006    王昭君
dtype: object
--------------------
索引切片
004     哪吒
005     虞姬
006    王昭君
dtype: object

注意

  • 获取数据格式—对象名[]
  • 获取多个不连续数据时是双层括号— 对象名[[]]
  • 使用切片时使用的是—对象名[:]

那么, 原来的默认索引去哪里了呢?其实还是存在的,并且可以使用。

我们自定的index值被叫做索引下标,没有设置index值时会有一个默认的值叫做位置下标。

from pandas import Series

mp=['001','002','003','004','005','006']
name=['亚瑟', '后裔','小乔','哪吒' ,'虞姬','王昭君']
se = Series(data=name,index=mp)

# 使用索引获取单个数值
print(se[0])
print('-'*20)
# 使用索引获取多个不连续的数值
print('位置下标')
print(se[[1,3,5]])
print('-'*20)
# 使用索引获取多个连续的数值
print('位置切片')
print(se[3:5])

# 输出结果:
亚瑟
--------------------
位置下标
002     后裔
004     哪吒
006    王昭君
dtype: object
-----------
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值