Pandas模块

Pandas简介

pandas是用于对数据进行分析,其需要依赖numpy模块,所以需要首先安装numpy
安装:pip install pandas
导入:import pandas as pd
主要功能:
1、具备对其功能的数据结构DataFrame、Series(即两种对象,其实有更多)
2、集成时间序列功能
3、提供丰富的数学运算和操作
4、灵活处理缺失数据

Series对象

Series对象是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成,好像是字典和列表的结合体

创建

方式一、pd.Series(列表或数组{,index=[列表]})

sr = pd.Series([1, 3, 5, 7, 9])
"""
0    1
1    3
2    5
3    7
4    9
""" 
sr = pd.Series([1, 3, 5, 7, 9], index=list(‘abcde‘))
"""
a    1
b    3
c    5
d    7
e    9
dtype: int64
"""

方式二、pd.Series(字典)

sr = pd.Series({‘a‘: 1, ‘b‘: 3, ‘c‘: 5, ‘d‘: 7, ‘e‘: 9})
"""
a    1
b    3
c    5
d    7
e    9
dtype: int64
"""

取对应下标或标签的值

sr = pd.Series({‘a‘: 1, ‘b‘: 3, ‘c‘: 5, ‘d‘: 7, ‘e‘: 9})
"""
a    1
b    3
c    5
d    7
e    9
dtype: int64
"""
# 可按下标取值
print(sr[0])  # 1
# 如指定了标签,则可使用标签,字典的key
print(sr[‘c‘])  # 5

属性

index属性和values属性

# index属性
sr = pd.Series({‘a‘: 1, ‘b‘: 3, ‘c‘: 5, ‘d‘: 7, ‘e‘: 9})
print(sr.index)  # Index([‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘], dtype=‘object‘)
# values属性
sr = pd.Series({‘a‘: 1, ‘b‘: 3, ‘c‘: 5, ‘d‘: 7, ‘e‘: 9})
print(sr.values)  # [1 3 5 7 9]

iloc属性:指定用下标索引
loc属性:标签索引

Series特性

数组的特性

Series支持数组(numpy)的特性,如与数值的计算、两个Series的运算,索引、切片、通用函数(如np.sqrt(sr))、布尔值过滤、统计函数

字典的特性

1、in运算:
‘a‘ in sr:判断a是不是sr的标签之一
for x in sr:这里注意,python循环的是字典的键,而在Series中循环的是sr的值

sr = pd.Series({‘a‘: 1, ‘b‘: 3, ‘c‘: 5, ‘d‘: 7, ‘e‘: 9})
for x in sr:
    print(x)
"""
1
3
5
7
9
"""
# 如果要循环标签,可加上index,如下:
for x in sr.index:
    print(x)
"""
a
b
c
d
e
"""

2、键索引:sr[‘a‘]、sr[[‘a‘, ‘b‘, ‘e‘]]
3、键切片:sr[‘a‘:‘c‘],注意python字典切片是不包尾,但在Series切片是包尾的

sr = pd.Series({‘a‘: 1, ‘b‘: 3, ‘c‘: 5, ‘d‘: 7, ‘e‘: 9})
print(sr[‘a‘: ‘c‘])
"""
a    1
b    3
c    5
"""

4、get函数:与字典的get是类似的sr.get(‘a‘, default=0)

整数索引

以下情况:

sr1 = pd.Series([1, 3, 5, 7, 9, 11])
sr2 = sr1[2:5]
"""
2    5
3    7
4    9
"""

那么sr2[2]是按下标索引还是标签索引?下面做了个测试

print(sr2[2])  # 5

得出了是按标签索引,所以默认是按标签索引,而如果要指定是按下标索引怎么办呢?用到iloc属性,如下:

print(sr2.iloc[2])  # 9

也可指定用标签索引,用loc属性

print(sr2.loc[2])  # 5

数据对齐

Series之间进行运算,是根据相同标签查找的值进行运算,如下:

# 按标签进行运算,不是按下标运算
sr1 = pd.Series([12, 23, 34], index=list(‘cad‘))
sr2 = pd.Series([11, 20, 10], index=list(‘dca‘))
sr3 = sr1 + sr2
"""
a    33
c    32
d    45
"""

如果找不到对应的下标,则会用NaN标记,如下:

sr1 = pd.Series([12, 23, 34], index=list(‘cae‘))
sr2 = pd.Series([11, 20, 10], index=list(‘dca‘))
sr3 = sr1 + sr2
"""
a    33.0
c    32.0
d     NaN
e     NaN
"""

如果需要在缺失的数据上填上默认值怎么办呢?那这时候进行运算时就需要用到add、sub、div、mul等运算的fill_value,例子如下:

sr1 = pd.Series([12, 23, 34], index=list(‘cae‘))
sr2 = pd.Series([11, 20, 10], index=list(‘dca‘))
print(sr1.add(sr2, fill_value=0))
"""
a    33.0
c    32.0
d    11.0
e    34.0
"""

缺失数据的处理

1、sr.dropno():把Series中标记为NaN的数据丢弃

sr1 = pd.Series([12, 23, 34], index=list(‘cae‘))
sr2 = pd.Series([11, 20, 10], index=list(‘dca‘))
sr3 = sr1 + sr2
print(sr3.dropna())
"""
a    33.0
c    32.0
"""

2、sr.fillna(值):填充一个值
3、sr.isnull():返回一个布尔数组,缺失值对应为True

sr1 = pd.Series([12, 23, 34], index=list(‘cae‘))
sr2 = pd.Series([11, 20, 10], index=list(‘dca‘))
sr3 = sr1 + sr2
"""
a    False
c    False
d     True
e     True
"""

4、sr.notnull():返回一个布尔数值,缺失值对应为False
注意:panads一般需要重新赋值才可以继续使用,不赋值那还是原来的值???

相关推荐