开发者社区> 木子昭> 正文

机器学习三剑客之Pandas

简介: pandas Pandas是基于Numpy开发出的,专门用于数据分析的开源Python库 Pandas的两大核心数据结构 Series(一维数据) Series 创建Series的方法 ...
+关注继续查看
pandas

Pandas是基于Numpy开发出的,专门用于数据分析的开源Python库

Pandas的两大核心数据结构

  • Series(一维数据)
Series
创建Series的方法
允许索引重复
  • DataFrame(多特征数据,既有行索引,又有列索引)
DataFrame
索引方法
# 创建一个3行4列的DataFrame类型数据
data_3_4 = pd.DataFrame(np.arange(10, 22).reshape(3, 4))
# 打印数据
print(data_3_4)

# 打印第一行数据
print(data_3_4[:1])
# 打印第一列数据
print(data_3_4[:][0])
  • DataFrame的属性
原始数据
DataFrame的属性
# 读取数据
result = pd.read_csv("./students_score.csv")
# 数据的形状
result.shape
# 每列数据的 类型信息
result.dtypes
# 数据的维数
result.ndim
# 数据的索引(起/始/步长)
result.index
# 打印每一列 属性的名称
result.columns
# 将数据放到数组中显示
result.values
整体查询
# 打印前5个
print("-->前5个:")
print(result.head(5))
# 打印后5个
print("-->后5个:")
print(result.tail(5))
# 打印描述信息(实验中好用)
print("-->描述信息:")
print(result.describe())

Panda数据读取(以csv为例)

pandas.read_csv(filepath_or_buffer, sep=",", names=None, usecols = None)

filepath_or_buffer : 文件路径(本地路径或url路径)
sep: 分隔符
names: 列索引的名字
usecols: 指定读取的列名

返回的类型: DataFrame  
读取并返回数据
  • Dataframe通过布尔索引过滤数据
布尔索引
# 布尔索引(查询) 找出年龄大于23岁的人
result[result["age"]>23]

小案例: 分析2006年至2016年1000部IMDB电影数据

2006年----2016年IMDB最受欢迎的1000部电影
评分降序排列
统计时长
IMDB_1000 = pd.read_csv("./IMDB-Movie-Data.csv")
# 获取数据字段
print(IMDB_1000.dtypes)
# 根据1000部电影评分进行降序排列,参数ascending, 默认为True(升序), 这里为False(降序)
IMDB_1000.sort_values(by="Rating", ascending=False)
# 时间最长的电影
IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].max()]
# 时间最短的电影
IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].min()]
# 电影时长平均值
IMDB_1000["Runtime (Minutes)"].mean()

数据处理

  • 存在缺失值, 直接删除数据(删除存在缺失值的样本)
删除存在缺失值的样本
# 删除存在缺失值的样本
IMDB_1000.dropna()

不推荐的操作: 按列删除缺失值为IMDB_1000.dropna(axis=1)

  • 存在缺失值, 直接填充数据fillna
填充空缺值
使用平均值填充数据
# 为一些电影缺失的总票房添加平均值
IMDB_1000["Revenue (Millions)"].fillna(IMDB_1000["Revenue (Millions)"].mean(), inplace=True)

小案例: 乳腺癌数据预处理 (在线获取数据,并替换缺失符号为标准缺失符号np.nan)

替换默认的缺失符号
各列命名
读取原始数据
# 在线读取数据,并按照说明文档, 并对各列信息进行命名
bcw = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=["Sample code number","Clump Thickness","Uniformity of Cell Size","Uniformity of Cell Shape", "Marginal Adhesion","Single Epithelial Cell Size","Bare Nuclei","Bland Chromatin","Normal Nucleoli","Mitoses","Class:"])
预处理,把?替换为np.nan

小案例: 日期格式转换 数据来源

facebook
日期格式转换
# 读取前10行数据
train = pd.read_csv("./train.csv", nrows = 10)
# 将数据中的time转换为最小分度值为秒(s)的计量单位
train["time"] = pd.to_datetime(train["time"], unit="s")
  • 从日期中拆分出新的列
新增列
# 新增列year, month, weekday
train["year"] = pd.DatetimeIndex(train["time"]).year
train["month"] = pd.DatetimeIndex(train["time"]).month
train["weekday"] = pd.DatetimeIndex(train["time"]).weekday

数据表的合并(merge)

数据
user_info.csv
user_id,姓名,age
1,徐三,23
2,徐四,22
3,宝儿,210
4,楚岚,21
5,王也,24
6,诸葛青,21
7,天师,89
8,吕梁,24
9,夏禾,26
goods_info.csv
goods_id,goods_name
G10,三只松鼠
G12,MacBook
G13,iPad
G14,iPhone
order_info.csv
order_id,use_id,goods_name
as789,1,三只松鼠
sd567,2,MacBook
hj456,4,iPad
合并过程
# 读取3张表
user_info = pd.read_csv("./user_info.csv")
order_info = pd.read_csv("./order_info.csv")
goods_info = pd.read_csv("./goods_info.csv")
# 合并三张表
u_o = pd.merge(user_info, order_info, how="left", on=["user_id", "user_id"])
u_o_g = pd.merge(u_o, goods_info, how="left", on=["goods_name", "goods_name"])
  • 建立交叉表(用于计算分组的频率)
交叉表
# 交叉表, 表示出用户姓名,和商品名之间的关系
user_goods = pd.crosstab(u_o_g["姓名"],u_o_g["goods_name"])

Pandas的分组和聚合(重要)

小案例: 星巴克全球分布情况 数据来源

全球星巴克分布情况

读取全球星巴克的位置数据
每个国家星巴克的数量
每个国家每个省份星巴克的数量
starbucks = pd.read_csv("./directory.csv")
# 统计每个国家星巴克的数量
starbucks.groupby(["Country"]).count()
# 统计每个国家 每个省份 星巴克的数量
starbucks.groupby(["Country", "State/Province"]).count()
  • 全球各国星巴克数量排名
全球星巴克数量排名

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Google Java编程风格规范(2020年4月原版翻译)
Google Java Style Guide 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然而,这份文档主要侧重于我们所普遍遵循的规则,
3 0
6. Git 补充内容
提交 ID 显式引用和隐式引用用来指代每一次提交。尽管有时两种引用都不方便,但是幸运的是, Git 提供了许多不同的机制来为提交命名,这些机制有各自的优势,需要根据上下文来选择。
3 0
Python web服务器2: http协议
Python web服务器2: http协议
3 0
Python web服务器3: 静态服务器&并发web服务器
Python web服务器3: 静态服务器&并发web服务器
1 0
Swift-进阶 09:闭包(一)使用&捕获原理
Swift-进阶 09:闭包(一)使用&捕获原理
1 0
Python web服务器4: 网络通信
Python web服务器4: 网络通信
1 0
+关注
木子昭
# 专注极客体验 # 享受效率生活 --- 让程序去做呗~ 程序又不会累~
217
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载