数据挖掘之Python3下pandas的使用

这篇博客介绍了Python数据分析库pandas的使用,包括序列(Series)的概念和操作,如序列的索引、统计运算等,适用于数据挖掘任务。
摘要由CSDN通过智能技术生成

(一)介绍

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

(二)序列(Series)

序列(Series)是Python中的列表、元组的高级版本。序列与上期介绍的一维数组类似,具有更好的广播效应,既可以与一个标量进行运算,又可以进行元素级函数的计算。

  • 一个简单的列表相加直接报错了
    image.png

  • 使用序列(Series)相加没有出现报错的情况

image.png

(三)序列的使用姿势

这里序列的使用包括序列的索引,成员关系,排重,排序,计数,抽样,统计运算

"""
序列的索引,成员关系,排重,排序,计数,抽样,统计运算
"""
print('****** 序列的索引,成员关系,排重,排序,计数,抽样,统计运算 ******')
import numpy as np
np.random.seed(1)
s1 = pd.Series(np.random.randint(size=5,low=1,high=10))
print(s1,'\n')

print('**** 取第一个元素 ****')
print(s1[0],'\n')
print('**** 取第2~3个元素 ****')
print(s1[1:3],'\n')
print('**** 依次取元素,步长为2 ****')
print(s1[::2],'\n')

print('倒数取元素(简洁并高速):')
print(s1)
print(s1.iat[-3],'\n')
print(s1[-3:],'\n')

print('布尔索引:')
s2 = pd.Series(np.random.randint(size=5,low=1,high=100))
print(s2)
# 取出>=70的值
print(s2[s2>=70])
# 取出40到50之间的值
print('------')
print(s2[s2>=10][s2<=50])

# 一个向量的元素是否包含于另一个向量  np.in1d
arr1 = np.array([1,2,3,4])
arr2 = np.array([10,20,3,40])
print(np.in1d(arr1,arr2),'\n')

s1 = pd.Series(['A','B','C','D'])
s2 = pd.Series(['X','A','Y','D'])
print('s1 是否包含于 s2中')
print(s1.isin(s2),'\n')
print(np.in1d(s1,s2),'\n')

# 序列去重及水平统计
s = np.random.randint(size=1000,low=1,high=4)
print('序列去重及水平统计','\n',s)
# 排重
print(pd.unique(s),'\n')
# 水平统计
print(pd.value_counts(s))

# 序列的排序
s = pd.Series(np.random.normal(size=4))
# 序列索引排序
print(s.sort_index(ascending=False),'\n')# 降序排序
# 序列的值排序
print(s.sort_values()) # 按序列的实际值升序排序

图片一.png
图片二.png
图片三.png
图片四

(四)抽样

# 抽样
print('***********  抽样 ********** ')
"""
s.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
n:指定抽取的样本量;
frac:指定抽取的样本比例;
replace:是否有放回抽样,默认无放回;
weights:指定样本抽中的概率,默认等概论抽样;
random_state:指定抽样的随机种子
"""

# 从1...100中随机抽取3个幸运儿
r_1 = pd.Series(range(1, 101))
print(r_1.sample(n=3, random_state=2), '\n')

# 从1...5中有放回的抽取3个值
r_2 = pd.Series(range(1,6))
print(r_2.sample(n=3,replace=True,random_state=2),'\n')

# 从男、女性别中不等概率抽10个样本
r_3 = pd.Series(['男','女'])
s_3 = r_3.sample(n=10,replace=True,weights=[0.2,0.8],random_state=3)
print(s_3,'\n')

抽样

(五)统计运算

这里的统计函数与上一篇Numpy的统计函数相差不多,故没有进行多的实践,

print('********  统计运算  *********')
np.random.seed(123)
s = pd.Series(np.random.randint(size=100,low=10,high=30))
print('原始值:',s,'\n')
s_des = s.describe()
print(s_des,'\n')

# 判断一个元素是否为缺失元素  isnull

s = pd.Series([1,2,np.nan,4,np.nan,6])
print(s,'\n')
print(s.isnull)

统计运算
统计运算二
<声明:统计运算的用例大了些,只能截取部分的结果>

(六)其他统计函数

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

附上全部代码:

# -*- coding: utf-8 -*-
# @Time    : 2018/4/4 14:45
# @Author  : 蛇崽
# @Email   : 643435675@QQ.com
# @File    : pandas_learning.py(pandas库的学习:向量,数据框的处理)
import pandas as pd

m_list = [1,3,5]

# 将列表转换为序列
pd_series = pd.Series(m_list)
pd_result = pd_series+10
print(pd_result)

ls1 = [1,3,5]
series1 = pd.Series(ls1)
# x^2
temp = pow(series1,2)
print(temp)

"""
序列的索引,成员关系,排重,排序,计数,抽样,统计运算
"""
print('****** 序列的索引,成员关系,排重,排序,计数,抽样,统计运算 ******')
import numpy as np
np.random.seed(1)
s1 = pd.Series(np.random.randint(size=5,low=1,high=10))
print(s1,'\n')

print('**** 取第一个元素 ****')
print(s1[0],'\n')
print('**** 取第2~3个元素 ****')
print(s1[1:3],'\n')
print('**** 依次取元素,步长为2 ****')
print(s1[::2],'\n')

print('倒数取元素(简洁并高速):')
print(s1)
print(s1.iat[-3],'\n')
print(s1[-3:],'\n')

print('布尔索引:')
s2 = pd.Series(np.random.randint(size=5,low=1,high=100))
print(s2)
# 取出>=70的值
print(s2[s2>=70])
# 取出40到50之间的值
print('------')
print(s2[s2>=10][s2<=50])

# 一个向量的元素是否包含于另一个向量  np.in1d
arr1 = np.array([1,2,3,4])
arr2 = np.array([10,20,3,40])
print(np.in1d(arr1,arr2),'\n')

s1 = pd.Series(['A','B','C','D'])
s2 = pd.Series(['X','A','Y','D'])
print('s1 是否包含于 s2中')
print(s1.isin(s2),'\n')
print(np.in1d(s1,s2),'\n')

# 序列去重及水平统计
s = np.random.randint(size=1000,low=1,high=4)
print('序列去重及水平统计','\n',s)
# 排重
print(pd.unique(s),'\n')
# 水平统计
print(pd.value_counts(s))

# 序列的排序
s = pd.Series(np.random.normal(size=4))
# 序列索引排序
print(s.sort_index(ascending=False),'\n')# 降序排序
# 序列的值排序
print(s.sort_values()) # 按序列的实际值升序排序


# 抽样
print('***********  抽样 ********** ')
"""
s.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
n:指定抽取的样本量;
frac:指定抽取的样本比例;
replace:是否有放回抽样,默认无放回;
weights:指定样本抽中的概率,默认等概论抽样;
random_state:指定抽样的随机种子
"""

# 从1...100中随机抽取3个幸运儿
r_1 = pd.Series(range(1, 101))
print(r_1.sample(n=3, random_state=2), '\n')

# 从1...5中有放回的抽取3个值
r_2 = pd.Series(range(1,6))
print(r_2.sample(n=3,replace=True,random_state=2),'\n')

# 从男、女性别中不等概率抽10个样本
r_3 = pd.Series(['男','女'])
s_3 = r_3.sample(n=10,replace=True,weights=[0.2,0.8],random_state=3)
print(s_3,'\n')

print('********  统计运算  *********')
np.random.seed(123)
s = pd.Series(np.random.randint(size=100,low=10,high=30))
print('原始值:',s,'\n')
s_des = s.describe()
print(s_des,'\n')

# 判断一个元素是否为缺失元素  isnull

s = pd.Series([1,2,np.nan,4,np.nan,6])
print(s,'\n')
print(s.isnull)

print('**********  pandas 其他统计函数 ************')

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

p1 = np.random.randint(low=10,high=999,size=200)
min1 = p1.min()
max1 = p1.max()
print(min1)
print(max1)
cum1 = p1.cumsum()
print(cum1)
m1 = p1.mean()
print(m1)
print(p1.sum())

以上更新截止:2018/04/07 22:46
你还可以学习:
数据挖掘之Numpy详细了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值