结构化数据分析工具Pandas数据结构
Pandas是数据分析工具,那我们要思考的是,它能分析什么样的数据?所分析的数据需要具备什么样的结构呢?基于此,我们主要分为三个部分来讲:
- 1.Pandas数据结构
- 2.数据结构—Series
- 3.数据结构—DataFrame
Pandas之数据结构
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对象举例:
- 通过传入一个
列表
来创建一个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
- 通过传入一个
字典
创建一个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对象中的索引和数据,所以该对象提供了两个属性index
和values
分别进行获取。
# 获取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的索引不仅有行索引
,还有列索引
,数据可以有多列。
3.1 DataFrame的创建方式
Pandas的DataFrame类对象的原型如下(仅作了解):
pandas.DataFrame(data = None,index = None,columns = None,
dtype = None,copy = False )
index
:表示行标签
。若不设置该参数,则默认会自动
创建一个从0~N
的整数索引。columns
:列标签
- 通过
传入数组
来创建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
- 点赞
- 收藏
- 关注作者
评论(0)