pandas 我们课程后续用得最多的一个模块,主要用于进行数据探索和数据分析
Pandas 是基于 NumPy
pandas库与numpy的区别
• Numpy
• 基础数据类型
• 关注数据的结构表达
• 维度:数据间关系
-------------------------------------------------------------
• Pandas
• 扩展数据类型
• 关注数据的应用表达
• 数据与索引间的关系
Pandas 的数据结构
Series 是一种一维数组,和 NumPy 里的数组很相 似。事实上,Series 基本上就是基于 NumPy 的数组对象来的。和 NumPy 的数组不同,Series 能为数据自定义标签,也就是索引(index),然后通过索引来访问数组中的数据。
通常,我们导入如下:
In [1]: import numpy as np
In [2]: import pandas as pd
对象创建
Series类型由一组数据及与之相关的数据索引组成。
Serjes可以由如下类型创建:
1.python列表,index与列表元素个数一致
2.标量值,index表达Series类型的尺寸
3.ndarray,索引和数据都可以通过ndarray创建
4.python 字典 键值中的键是索引,index从字典中进行选择操作
5.其他函数,range()函数等。
创建一个Series
通过传递值的列表,让大熊猫创建一个默认的整数索引:
s = pd.Series(date,index)
上面的 data 参数可以是任意数据对象,比如字典、列表甚至是 NumPy 数组,而index 参数则是对 data 的索引值,类似字典的 key。
下面这个例子里,将创建一个 Series 对象,并用字符串对数字列表进行索引:
In [22]: countries = ['USA','Nigeria','France','Ghana']
...: my_date = [100,200,300,400]
...: s = pd.Series(my_date,tcountries)
In [23]: s
Out[23]:
USA 100
Nigeria 200
France 300
Ghana 400
dtype: int64 #Numpy 中的数据类型
注意:请记住, index 参数是可省略的,你可以选择不输入这个参数。如果不带 index 参数,Pandas 会自动用默认 index 进行索引,类似数组,索引值是 [0, ..., len(data) - 1] ,如下所示:
从 NumPy 数组对象创建 Series:
In [5]: np_arr = np.array(my_date)
In [6]: pd.Series(np_arr)
Out[6]:
0 100
1 200
2 300
3 400
dtype: int32
#从字典创建Series数组
In [7]: my_dict = {'a':50,'b':60,'c':70,'d':80}
...: pd.Series(my_dict)
Out[7]:
a 50
b 60
c 70
d 80
dtype: int64
#如果传入index 从字典的键进行挑选,无值则为NaN,按index的顺序来
In [11]: e =pd.Series(my_dict,index=['c','a','b','d','f'])
In [12]: e
Out[12]:
c 70.0
a 50.0
b 60.0
d 80.0
f NaN
dtype: float64
Series类型的基本操作 |
---|
Series类型包括index和values两部分。 |
Series类型的操作类似ndarray类型。 |
Series类型的操作类似python字典类型。 |
Series对象可以根据 .index 和.values 获得Series对象的索引和数据,示例代码如下: |
In [15]: import pandas as pd
# 导入pandas as pd
In [16]: b= pd.Series([9,8,7,6],['a','b','c','d'])
#生成一个Series 对象
In [17]: b
Out[17]:
a 9
b 8
c 7
d 6
dtype: int64
In [18]: b.index #获取所有的索引
Out[18]: Index(['a', 'b', 'c', 'd'], dtype='object')
In [19]: b.values #获取所有的values值
Out[19]: array([9, 8, 7, 6], dtype=int64)
In [20]: b['b']
Out[20]: 8
In [21]: b[1]
Out[21]: 8
#自动索引和自定义索引并存
In [22]: b[['c','d',0]]
Out[22]:
c 7.0
d 6.0
0 NaN
dtype: float64
In [23]: b[['c','d','a']]
Out[23]:
c 7
d 6
a 9
dtype: int64
#两套索引共存但是不能混合使用
Series类型的操作类似ndarray类型。 |
---|
索引方法相同,都采用[] |
NumPy中运算和操作可用于Series类型 |
可以通过自定义索引的列表进行切片。 |
可以通过自定义索引进行切片,如果存在自定义索引,则一同被切片 |
In [24]: b[3] #通过自动索引3 取到5
Out[24]: 6
In [25]: b[:3]# 切片0-3之内的值并且还有其索引
Out[25]:
a 9
b 8
c 7
dtype: int64
In [26]: b[b>b.median()] #大于中位数的
Out[26]:
a 9
b 8
dtype: int64
In [27]: np.exp(b) #e的x方运算
Out[27]:
a 8103.083928
b 2980.957987
c 1096.633158
d 403.428793
dtype: float64
Series类型的操作类似python字典类型。 |
---|
通过自定义索引访问。 |
保留字in操作 |
使用.get()方法 |
In [28]: 'c' in b
Out[28]: True #判断自定义索引是否在b中
In [29]: 0 in b
Out[29]: False #无法判断自动索引 ok?
In [30]: b.get('f',100) #b中提取f索引的值100,如果不存在则返回100,存在返回f对应的值如果不定义100则返回空
Out[30]: 100
Series的对齐问题,示例代码如下:
In [34]: a =pd.Series([1,2,3],['c','d','e'])
#生成一个Series对象a
In [35]: a+b
Out[35]: #结果是一个并集只有同索引的值可以相加,其他值默认都是NaN
a NaN
b NaN
c 8.0
d 8.0
e NaN
dtype: float64
PS:
Series类型在运算中会自动对齐不同索引的数据
Series类型的name属性:
Series对象和索引都可以有一个名字,存储在.name中。
In [37]: b.name In [38]: b.name='Series 对象' #给b.name 赋值 In [39]: b.index.name='索引列' #给index.name赋值 In [40]: b Out[40]: 索引列 a 9 b 8 c 7 d 6 Name: Series 对象, dtype: int64
Series类型的修改
Series对象可以随时修改并即刻生效。
In [42]: b Out[42]: 索引列 a 9 b 8 c 7 d 6 Name: Series 对象, dtype: int64 In [43]: b['a'] Out[43]: 9 In [44]: b['a']=15 In [45]: b.name = 'Series' #赋值生效 In [46]: b Out[46]: 索引列 a 15 b 8 c 7 d 6 Name: Series, dtype: int64 In [47]: b.name = 'New Series' In [48]: b['b','c'] = 20 In [49]: b Out[49]: 索引列 a 15 b 20 c 20 d 6 Name: New Series, dtype: int64