结构化数据分析工具Pandas数据结构

举报
xcc-2022 发表于 2022/07/19 20:15:42 2022/07/19
【摘要】 Pandas是数据分析工具,那我们要思考的是,它能分析什么样的数据?所分析的数据需要具备什么样的结构呢?基于此,我们主要分为三个部分来讲:1.Pandas数据结构2.数据结构—Series3.数据结构—DataFramePandas之数据结构1. Pandas数据结构2. 数据结构---Series2.1 Series的创建方式2.2 使用索引和获取数据3. 数据结构---DataFrame...

Pandas是数据分析工具,那我们要思考的是,它能分析什么样的数据?所分析的数据需要具备什么样的结构呢?基于此,我们主要分为三个部分来讲:

  • 1.Pandas数据结构
  • 2.数据结构—Series
  • 3.数据结构—DataFrame



1. Pandas数据结构

Pandas有两个最主要也是最重要的数据结构: Series  DataFrame

类型 描述
Series 一维的数据结构
DataFrame 二维表格型的数据结构

2. 数据结构—Series

Series是一个类似一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成,函数如下:

pandas.Series(data, index, dtype, name, copy)

参数说明:

  • data:一组数据(ndarray 类型)
  • index:数据索引标签,如果不指定,默认从 0 开始
  • dtype:数据类型,默认会自己判断
  • name:设置名称
  • copy:拷贝数据,默认为 False

注意:
Series的索引位于左边,数据位于右边

index element
0 1
1 2
2 3
3 4
4 5

2.1 Series的创建方式

Pandas的Series类对象的原型如下(仅作了解):

class pandas.Series(data = None,index = None,dtype = None,
name = None,copy = False,fastpath = False)

data:表示传入的数据
index:表示索引唯一且与数据长度相等,默认会自动创建一个从0~N的整数索引。

创建series对象举例:

  1. 通过传入一个列表来创建一个Series类对象:
# 给pandas起个别名pd
import pandas as pd 
# 创建Series类对象
ser_obj = pd.Series([1, 2, 3, 4, 5])
print(ser_obj)

输出:

0    1
1    2
2    3
3    4
4    5
dtype: int64

创建Series类对象,并指定索引

# 给pandas起个别名pd
import pandas as pd

# 创建Series类对象
ser_obj = pd.Series([1, 2, 3, 4, 5])
ser_obj.index = ['a', 'b', 'c', 'd', 'e']
print(ser_obj)

输出:

a    1
b    2
c    3
d    4
e    5
dtype: int64
  1. 通过传入一个字典创建一个Series类对象,其中字典的key就是Series的index,例如:
import pandas as pd
year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5}
ser_obj2 = pd.Series(year_data)
print(ser_obj2)

输出:

2001    17.8
2002    20.1
2003    16.5
dtype: float64

2.2 使用索引和获取数据

为了能方便地操作Series对象中的索引和数据,所以该对象提供了两个属性indexvalues分别进行获取。

# 获取ser_obj的索引
ser_obj.index
# 获取ser_obj的数据
ser_obj.values

举例:

# 给pandas起个别名pd
import pandas as pd

# 创建Series类对象
ser_obj = pd.Series([1, 2, 3, 4, 5])
ser_obj.index = ['a', 'b', 'c', 'd', 'e']
print(ser_obj.index)
print('-'*50)
print(ser_obj.values)

输出:

Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
--------------------------------------------------
[1 2 3 4 5]

当然,我们也可以直接使用索引获取数据

# 获取位置索引3对应的数据
print(ser_obj[2])

输出是:3

当某个索引对应的数据进行运算以后,其运算的结果会替换原数据,仍然与这个索引保持着对应的关系。
在这里插入图片描述

运算


例如:


# 给pandas起个别名pd
import pandas as pd

# 创建Series类对象
ser_obj = pd.Series([1, 2, 3, 4, 5])
ser_obj.index = ['a', 'b', 'c', 'd', 'e']
ser_obj2 = ser_obj * 2

print(ser_obj)
print('-' * 50)
print(ser_obj)

结果:

a    1
b    2
c    3
d    4
e    5
dtype: int64
--------------------------------------------------
a    1
b    2
c    3
d    4
e    5
dtype: int64

3. 数据结构—DataFrame

DataFrame是一个类似于二维数组表格(如excel)的对象,它每的数据都可以是不同的数据类型。

注意:
DataFrame的索引不仅有行索引,还有列索引,数据可以有多列。

在这里插入图片描述

DataFrame


3.1 DataFrame的创建方式

Pandas的DataFrame类对象的原型如下(仅作了解):

pandas.DataFrame(data = None,index = None,columns = None,
dtype = None,copy = False )

index:表示行标签。若不设置该参数,则默认会自动创建一个从0~N的整数索引。
columns列标签

  1. 通过传入数组来创建DataFrame类对象:
import numpy as np
import pandas as pd

# 创建数组
demo_arr = np.array([['a', 'b', 'c'],
                     ['d', 'e', 'f']])
# 基于数组创建DataFrame对象
df_obj = pd.DataFrame(demo_arr)
print(df_obj)

输出:

   0  1  2
0  a  b  c
1  d  e  f

在创建DataFrame类对象时,如果为其指定了列索引,则DataFrame的列会按照指定索引的顺序进行排列,比如指定列索引No1,No2, No3的顺序:

df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
index No1 No2 No3
0 a b c
1 d e f

3.2 使用列索引或访问属性获取数据

我们可以使用dataframe的列索引的方式来获取一列数据,返回的结果是一个Series对象。

import numpy as np
import pandas as pd

# 创建数组
demo_arr = np.array([['a', 'b', 'c'],
                     ['d', 'e', 'f']])
# 基于数组创建DataFrame对象,并指定列索引
df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
print(df_obj)
# 通过列索引的方式获取一列数据
element = df_obj['No2']
# 查看一列数据
print('查看一列数据:\n', element)
# 查看返回结果的类型
print(type(element))  # pandas.core.series.Series

输出:

  No1 No2 No3
0   a   b   c
1   d   e   f
查看一列数据:
 0    b
1    e
Name: No2, dtype: object
<class 'pandas.core.series.Series'>

我们还可以使用访问属性的方式来获取一列数据,返回的结果是一个Series对象。

# 通过属性获取列数据
element = df_obj.No2
# 查看返回结果的类型
type(element)#pandas.core.series.Series

在这里插入图片描述

注意:
获取DataFrame的一列数据时,推荐使用列索引的方式完成,主要是因为在实际使用中,列索引的名称中很有可能带有一些特殊字符(如空格),这时使用“点字符”进行访问就显得不太合适了。

3.3 增加列

要想为DataFrame增加一列数据,则可以通过给列索引或者列名称赋值的方式实现。

import numpy as np
import pandas as pd

# 创建数组
demo_arr = np.array([['a', 'b', 'c'],
                     ['d', 'e', 'f']])
# 基于数组创建DataFrame对象,并指定列索引
df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
print('原始数据:\n', df_obj)
# 增加No4一列数据
df_obj['No4'] = ['g', 'h']
print('增加一列之后的数据:\n', df_obj)

输出:

原始数据:
   No1 No2 No3
0   a   b   c
1   d   e   f
增加一列之后的数据:
   No1 No2 No3 No4
0   a   b   c   g
1   d   e   f   h

3.4 删除列

要想删除某一列数据,则可以使用del语句实现。

import numpy as np
import pandas as pd

# 创建数组
demo_arr = np.array([['a', 'b', 'c'],
                     ['d', 'e', 'f']])
# 基于数组创建DataFrame对象,并指定列索引
df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
print('原始数据:\n', df_obj)
# 删除No3一列数据
del df_obj['No3']
print('删除一列之后的数据:\n', df_obj)

输出:

原始数据:
   No1 No2 No3
0   a   b   c
1   d   e   f
删除一列之后的数据:
   No1 No2
0   a   b
1   d   e
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。