Python3基本工具包:Pandas(1)

作者:xxw9485
时间:2018/3/10
来源:http://mp.weixin.qq.com/s/pm8503plIouWGAtS3zAM5Q


Pandas

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

1、序列

序列(Series)可以理解成是R语言中的向量,Python中的列表、元组的高级版本。因为序列具有更好的广播效应,既可以与一个标量进行运算,又可以进行元素级函数的计算。而列表不能与标量进行运算,也不能用于元素级的数学函数。
实例:

# 输入:
a = [1,2,3] # 创建列表a
print(a + 10)
# 输出:
TypeError: can only concatenate list (not "int") to list
# 输入:
pow(a,2)
# 输出:
TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
# 输入:
import pandas as pd
a = [1,2,3] # 创建列表a
b = pd.Series(a) # 将列表a转换为序列
b + 10
# 输出:
0    11
1    12
2    13
dtype: int64
# 输入:
pow(b,2)
# 输出:
0    1
1    4
2    9
dtype: int64

除了上面介绍序列功能,再来说说其他序列常用的场景,如序列的索引、成员关系、去重、排序、计数、抽样、统计运算等。

1.1 序列的索引

类似列表的索引方法:

# 输入:
import numpy as np
import pandas as pd
np.random.seed(1)
a = pd.Series(np.random.randint(size=5,low=1,high=10))
print(a,'\n')
print(a[0],'\n') # 取第一个元素
print(a[1:3],'\n') # 取第二、第三个元素
print(a[::2],'\n') # 依次取数,步长为2
# 输出:
0    6
1    9
2    6
3    1
4    1
dtype: int32 

6 

1    9
2    6
dtype: int32 

0    6
2    6
4    1
dtype: int32 

iat方法:该方法不管应用于序列还是数据框都非常优秀,主要体现在简介而高速。

# 输入:
import numpy as np
import pandas as pd
np.random.seed(1)
a = pd.Series(np.random.randint(size=5,low=1,high=10))
print(a,'\n')
print(a.iat[-3],'\n') # 取倒数第三个元素
# 输出:
0    6
1    9
2    6
3    1
4    1
dtype: int32 

6 

布尔索引:

# 输入:
import numpy as np
import pandas as pd
np.random.seed(1)
a = pd.Series(np.random.randint(size=5,low=1,high=100))
print(a,'\n')
print(a[a>=20]) # 取出大于等于20的值
print(a[a>=20][a<=70]) # 取出20到70之间的值
# 输出:
0    38
1    13
2    73
3    10
4    76
dtype: int32 

0    38
2    73
4    76
dtype: int32
0    38
dtype: int32

1.2 序列的成员关系

在R语言中一个向量的元素是否包含于另一个向量,可以使用in函数进行判断,同理,Python中也有类似的方法。对于一个一维数组,in1d函数实现该功能;对于一个序列,isin方法可实现该功能。numpy模块中的in1d函数也可以用于序列的成员关系的比较。
注意:in1d函数第三个是数字1不是字母l。

# 输入:
import numpy as np
import pandas as pd
a = pd.Series([1,2,3,4])
b = pd.Series([10,2,3,40])
print(np.in1d(a,b),'\n')
print(a.isin(b),'\n')
c = np.array(['q','w','e','r'])
d = np.array(['q','a','w','s'])
print(np.in1d(c,d))
# 输出:
[False  True  True False] 

0    False
1     True
2     True
3    False
dtype: bool 

[ True  True False False]

1.3 序列的去重和水平统计

如果手中有一离散变量的序列,想查看该序列都有哪些水平,以及各个水平的频次,则可以借助于unique函数(与R语言一样的函数)实现序列的去重,获得不同的水平值;通过使用value_counts函数(对应于R语言的table函数)对各个水平进行计数,并按频次降序呈现。

# 输入:
import numpy as np
import pandas as pd
np.random.seed(10)
a = np.random.randint(size = 1000, low = 1, high = 4)
print(pd.unique(a),'\n') # 去重
print(pd.value_counts(a)) # 水平统计
# 输出:
[2 1 3] 

3    342
2    334
1    324
dtype: int64

1.4 序列的排序

对某个序列进行升序或降序排序,注意:排序函数默认升序。

# 输入:
import numpy as np
import pandas as pd
np.random.seed(10)
a = pd.Series(np.random.normal(size = 4))
print(a.sort_index(ascending = False),'\n') # 按索引降序排列
print(a.sort_values()) # 按序列的实际值升序排列
# 输出:
3   -0.008384
2   -1.545400
1    0.715279
0    1.331587
dtype: float64 

2   -1.545400
3   -0.008384
1    0.715279
0    1.331587
dtype: float64

1.5 序列的抽样

抽样也是数据分析中常用的方法,通过从总体中抽取出一定量的样本来推断总体水平;或者通过抽样将数据拆分成两部分,一部分建模,一部分测试。pandas模块提供了sample函数(与R语言的sample函数一致)帮我们完成抽样的任务。
语法如下:

s.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None) 

其中,n:指定抽取的样本量;
frac:指定抽取的样本比例;
replace:是否有放回抽样,默认无放回;
weights:指定样本抽中的概率,默认等概论抽样;
random_state:指定抽样的随机种子;

# 输入:
import pandas as pd
a = pd.Series(range(1,101)) # 从1到100随机抽取3个数
print(a.sample(n = 3, random_state = 2),'\n')
b = pd.Series(range(1,6)) # 从1到5有放回的抽取3个值
print(b.sample(n = 3, replace = True, random_state = 2),'\n')
c = pd.Series(['男','女']) # 从男、女中不等概率的抽取10个样本
print(c.sample(n = 10, replace = True, weights = [0.2,0.8],random_state = 3))
# 输出:
83    84
30    31
56    57
dtype: int32 

0    1
0    1
3    4
dtype: int32 

1111110101dtype: object

1.6 序列的统计运算

pandas模块提供了比numpy模块更丰富的统计运算函数,而且还提供了类似于R语言中的summary汇总函数,即describe函数。

# 输入:
import numpy as np
import pandas as pd
np.random.seed(10)
a = pd.Series(np.random.randint(size = 1000, low = 1, high = 101))
a.describe()
# 输出:
count    1000.000000
mean       50.406000
std        29.465834
min         1.000000
25%        24.000000
50%        50.000000
75%        76.000000
max       100.000000
dtype: float64

其中count是序列中非缺失元素的个数。哦,对了,如何判断一个序列元素是否为缺失呢?可以使用isnull函数,等同于R语言中的is.na函数。

# 输入:
import numpy as np
import pandas as pd
a = pd.Series([1,2,np.nan,4,np.nan,6])
print(a,'\n')
print(a.isnull())
# 输出:
0    1.0
1    2.0
2    NaN
3    4.0
4    NaN
5    6.0
dtype: float64 

0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool

除此,我们再来罗列一些常用的统计函数:

a.min()  # 最小值
a.quantile(q=[0,0.25,0.5,0.75,1]) # 分位数函数
a.median()  # 中位数
a.mode()  # 众数
a.mean()  # 平均值
a.mad()  # 平均绝对误差
a.max  # 最大值
a.sum()  # 和
a.std()  # 标准差
a.var()  # 方差
a.skew()  # 偏度
a.kurtosis()  # 峰度
a.cumsum()  # 和的累计,返回序列
a.cumprod()  # 乘积的累积,返回序列
a.product()  # 序列元素乘积
a.diff()  # 序列差异(微分),返回序列
a.abs()  # 绝对值,返回序列
a.pct_change()  # 百分比变化 ,返回序列
a.corr(s2)  # 相关系数
a.ptp()  # 极差  R中的range函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值