数据分析(七)之pandas学习【dataFrame的使用】
数据分析学习线路图
2、dataFrame的基本用法
2.1 dataFrame的创建
方法2:
import numpy as np
import pandas as pdt = pd.DataFrame(np.arange(12).reshape((3, 4)), index=list("ABC"), columns=list("WXYZ"))print(t)
输出:W X Y Z
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
那么问题来了:
DataFrame和Series有什么关系呢?
Series能够传入字典,那么DataFrame能够传入字典作为数据么?那么mongodb的数据是不是也可以这样传入呢?
对于一个dataframe类型,既有行索引,又有列索引,我们能够对他做什么操作呢?
import numpy as np
import pandas as pdd1 = dict(name=["xiaoming", "xiaohong"], age=[20, 32], tel=[10086, 10010])print(pd.DataFrame(d1))d2 = [{"name": "张三", "age": 45, "phone": "110"}, {"name": "李四", "phone": "10086"},{"name": "小光", "age": 18}]print(pd.DataFrame(d2))
输出:name age tel
0 xiaoming 20 10086
1 xiaohong 32 10010name age phone
0 张三 45.0 110
1 李四 NaN 10086
2 小光 18.0 NaN
DataFrame读取豆瓣数据集【数据集下载看数据分析六】
from pymongo import MongoClient
import numpy as np
import pandas as pdclient = MongoClient()
collection = client["douban"]["tv1"]data = list(collection.find())print(pd.DataFrame(data))
输出:
id ... total
0 59ba7f9b421aa91b08a43faa ... 2123
1 59ba7f9b421aa91b08a43fab ... 2123
2 59ba7f9b421aa91b08a43fac ... 2123
... ... ... ...
2377 59ba8022421aa91b08a448f3 ... 1454
2378 59ba8022421aa91b08a448f4 ... 1454[2379 rows x 26 columns]
继续优化,去除不要的豆瓣信息:注意上面打印的为2779x26条数据
# coding=utf-8
from pymongo import MongoClient
import pandas as pdclient = MongoClient()
collection = client["douban"]["tv1"]
data = collection.find()
data_list = []
for i in data:temp = {}temp["info"] = i["info"]temp["rating_count"] = i["rating"]["count"]temp["rating_value"] = i["rating"]["value"]temp["title"] = i["title"]temp["country"] = i["tv_category"]temp["directors"] = i["directors"]temp["actors"] = i['actors']data_list.append(temp)df = pd.DataFrame(data_list)
print(df)
打印输出:info ... actors
0 王伟/潘粤明/王泷正/梁缘/剧情/犯罪/悬疑/2017-08-30(中国大陆) ... [潘粤明, 王泷正, 梁缘]
1 丁黑/孙俪/陈晓/何润东/剧情/古装/2017-08-30(中国大陆) ... [孙俪, 陈晓, 何润东]
2 吕行/秦昊/邓家佳/姚橹/犯罪/悬疑/2017-09-06(中国大陆) ... [秦昊, 邓家佳, 姚橹]
... ... ... ...
2377 重光亨彦/津川雅彦/西田敏行/岩下志麻/历史/战争/2000-01-09(日本) ... [津川雅彦, 西田敏 行, 岩下志麻]
2378 永山耕三/芦田爱菜/夏洛特·凯特·福克斯/山本耕史/2016-04-17(日本) ... [芦田爱菜, 夏洛特·凯特·福克斯, 山本耕史][2379 rows x 7 columns]
2.2 DataFrame的基础属性和方法
# coding=utf-8
from pymongo import MongoClient
import pandas as pdclient = MongoClient()
collection = client["douban"]["tv1"]
data = collection.find()
data_list = []
for i in data:temp = {}temp["info"] = i["info"]temp["rating_count"] = i["rating"]["count"]temp["rating_value"] = i["rating"]["value"]temp["title"] = i["title"]temp["country"] = i["tv_category"]temp["directors"] = i["directors"]temp["actors"] = i['actors']data_list.append(temp)df = pd.DataFrame(data_list)
# print(df)# 显示头几行
print(df.head(1))
print("*"*100)
print(df.tail(2))# 展示df的概览
print(df.info())
print(df.describe())
输出:info ... actors
0 王伟/潘粤明/王泷正/梁缘/剧情/犯罪/悬疑/2017-08-30(中国大陆) ... [潘粤明, 王泷正, 梁缘][1 rows x 7 columns]
****************************************************************************************************info ... actors
2377 重光亨彦/津川雅彦/西田敏行/岩下志麻/历史/战争/2000-01-09(日本) ... [津川雅彦, 西田敏行, 岩下志麻]
2378 永山耕三/芦田爱菜/夏洛特·凯特·福克斯/山本耕史/2016-04-17(日本) ... [芦田爱菜, 夏洛特·凯特·福克斯, 山本耕史][2 rows x 7 columns]<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2379 entries, 0 to 2378
Data columns (total 7 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 info 2379 non-null object 1 rating_count 2379 non-null int64 2 rating_value 2379 non-null float643 title 2379 non-null object 4 country 2379 non-null object 5 directors 2379 non-null object 6 actors 2379 non-null object
dtypes: float64(1), int64(1), object(5)
memory usage: 130.2+ KB
Nonerating_count rating_value
count 2379.000000 2379.000000
mean 9079.419084 7.722783
std 16613.297194 1.068567
min 211.000000 2.800000
25% 807.000000 7.100000
50% 2573.000000 7.800000
75% 9256.000000 8.500000
max 170243.000000 9.800000
动手练习
回到之前我们读取的狗名字统计的数据上,我们尝试一下刚刚的方法
- 那么问题来了:
很多同学肯定想知道使用次数最高的前几个名字是什么呢?
df.sort_values(by=“Count_AnimalName”,ascending=False) - 那么问题又来了:
如果我的数据有10列,我想按照其中的第1,第3,第8列排序,怎么办?(看ipythpn的帮助文档)
# coding=utf-8
import pandas as pddf = pd.read_csv("./dogNames2.csv")
# print(df.head())
# print(df.info())# dataFrame中按照某一列进行排序的方法
df = df.sort_values(by="Count_AnimalName", ascending=False) # 降序排列
print(df.head(5))
打印输出:Row_Labels Count_AnimalName
1156 BELLA 1195
9140 MAX 1153
2660 CHARLIE 856
3251 COCO 852
12368 ROCKY 823
2.3 DataFrame的索引
# coding=utf-8
import pandas as pddf = pd.read_csv("./dogNames2.csv")
# print(df.head())
# print(df.info())# dataFrame中按照某一列进行排序的方法
df = df.sort_values(by="Count_AnimalName", ascending=False) # 降序排列
# print(df.head(5))# pandas取行或者列的注意点
# - 方括号写数组,表示取行,对行进行操作
# - 写字符串,表示的去列索引,对列进行操作
print(df[:5]) # 表示取前20行
print(df["Row_Labels"]) # 表示取Row_Labels这一列
print(type(df["Row_Labels"]))
打印输出:Row_Labels Count_AnimalName
1156 BELLA 1195
9140 MAX 1153
2660 CHARLIE 856
3251 COCO 852
12368 ROCKY 8231156 BELLA
9140 MAX
2660 CHARLIE
3251 COCO
12368 ROCKY...
6884 J-LO
6888 JOANN
6890 JOAO
6891 JOAQUIN
16219 39743Name: Row_Labels, Length: 16220, dtype: object
<class ‘pandas.core.series.Series’>
pandas之loc和iloc
2.4 布尔索引和缺失值的处理
回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过800的狗的名字,应该怎么选择?
import pandas as pd# pandas读取csv中的文件
df = pd.read_csv("./dogNames2.csv")
# print(df[(800 < df["Count_AnimalName"] < 1000)]) # 代码错误! 不应该这么写
print(df[(800 < df["Count_AnimalName"]) & (df["Count_AnimalName"] < 1000)])
打印Row_Labels Count_AnimalName
2660 CHARLIE 856
3251 COCO 852
12368 ROCKY 823
回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过700并且名字的字符串的长度大于4的狗的名字,应该怎么选择?
pandas的字符串处理方法
使用split分割豆瓣数据集
# coding=utf-8
from pymongo import MongoClient
import pandas as pdclient = MongoClient()
collection = client["douban"]["tv1"]
data = collection.find()
data_list = []
for i in data:temp = {}temp["info"] = i["info"]temp["rating_count"] = i["rating"]["count"]temp["rating_value"] = i["rating"]["value"]temp["title"] = i["title"]temp["country"] = i["tv_category"]temp["directors"] = i["directors"]temp["actors"] = i['actors']data_list.append(temp)df = pd.DataFrame(data_list)print(df["info"].str.split("/"))
print("*" * 100)
print(df["info"].str.split("/").tolist())
打印输出:
0 [王伟, 潘粤明, 王泷正, 梁缘, 剧情, 犯罪, 悬疑, 2017-08-30(中国大陆)]
1 [丁黑, 孙俪, 陈晓, 何润东, 剧情, 古装, 2017-08-30(中国大陆)]
2 [吕行, 秦昊, 邓家佳, 姚橹, 犯罪, 悬疑, 2017-09-06(中国大陆)]
3 [田里, 李现, 张铭恩, 王紫璇, 剧情, 悬疑, 2017-07-19(中国大陆)]
4 [游达志, 韩东君, 陈瑶, 李兰迪, 悬疑, 奇幻, 2017-08-14(中国大陆)]...
2374 [三宅喜重, 草剪刚, 大岛优子, 木村文乃, 剧情, 2015-01-06(日本)]
2375 [西谷弘, 木村拓哉, 筱原凉子, 松田翔太, 剧情, 2010-05-10(日本)]
2376 [岩本仁志, 佐藤隆太, 稻森泉, 北乃绮, 2012-04-18]
2377 [重光亨彦, 津川雅彦, 西田敏行, 岩下志麻, 历史, 战争, 2000-01-09(日本)]
2378 [永山耕三, 芦田爱菜, 夏洛特·凯特·福克斯, 山本耕史, 2016-04-17(日本)]
Name: info, Length: 2379, dtype: object
****************************************************************************************************
tolist因为数据过多不再展示
Process finished with exit code 0
缺失值的处理
import numpy as np
import pandas as pdt = pd.DataFrame(np.arange(12).reshape((3, 4)), index=list("ABC"), columns=list("WXYZ"))
t.iloc[1:, :2] = np.nanprint(t)
print(pd.isnull(t))
print(pd.notnull(t))
print(t[pd.notnull(t["W"])])
print("*" * 100)
# 删除nan数据
print(t.dropna(axis=0)) # 删除nan的行或者列、 axis=0:删除nan的行
print(t.dropna(axis=0, how="all")) # 当前行全部为nan才删除该行
print(t.dropna(axis=0, how="any")) # 当前行有nan就删除该行
print(t.dropna(axis=0, how="any", inplace=True)) # inplace=True对当前DataFrame的一个原地修改
print("*" * 100)
# 填充nan数据
d2 = [{"name": "xiaoming", "age": 20, "tel": 10086}, {"name": "xiaohong", "tel": 10010},{"name": "xiaoguang", "age": 30}]
t2 = pd.DataFrame(d2)
print(t2)print(t2["age"].fillna(t2["age"].mean()))
打印输出:W X Y Z
A 0.0 1.0 2 3
B NaN NaN 6 7
C NaN NaN 10 11W X Y Z
A False False False False
B True True False False
C True True False FalseW X Y Z
A True True True True
B False False True True
C False False True TrueW X Y Z
A 0.0 1.0 2 3
****************************************************************************************************W X Y Z
A 0.0 1.0 2 3W X Y Z
A 0.0 1.0 2 3
B NaN NaN 6 7
C NaN NaN 10 11W X Y Z
A 0.0 1.0 2 3
None
****************************************************************************************************name age tel
0 xiaoming 20.0 10086.0
1 xiaohong NaN 10010.0
2 xiaoguang 30.0 NaN
0 20.0
1 25.0
2 30.0
Name: age, dtype: float64Process finished with exit code 0
数据分析(七)之pandas学习【dataFrame的使用】相关推荐
- pandas dataframe创建_Python数据分析基础之Pandas学习 (上)
全文共 20592 字,63 幅图,预计阅读时间 52 分钟.[注:本帖小节 2.2 用万矿里的 WindPy 来下载金融数据]0引言 本文是 Python 系列的第六篇 Python 入门篇 (上) ...
- 数据分析(六)之pandas学习【Series创建、切片、索引和读取外部数据】
数据分析学习线路图 为什么要学习pandas? 那么问题来了:numpy已经能够帮助我们处理数据,能够结合matplotlib解决我们数据分析的问题,那么pandas学习的目的在什么地方呢? nump ...
- 【数据分析】认识Pandas:DataFrame和Series结构、属性
数据分析工具--Pandas 认识Pandas Dataframe 结构 DataFrame 构造方法 dtype参数 Series 结构 Series 构造方法 DataFrame和Series属性 ...
- Python数据分析扩展库pandas的DataFrame排序方法小结
>>> import numpy as np >>> import pandas as pd # 创建DataFrame >>> df = pd. ...
- 3.python数据分析处理库pandas(学习笔记)
1.数据的读取 import pandas food_info = pandas.read_csv("food_info.csv")#由于代码和数据是存在于同一文件夹下,所以不用指 ...
- pandas python2_Python数据分析之pandas学习(二)
有关pandas模块的学习与应用主要介绍以下8个部分: 1.数据结构简介:DataFrame和Series 2.数据索引index 3.利用pandas查询数据 4.利用pandas的DataFram ...
- Python 数据分析三剑客之 Pandas(七):合并数据集
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- Python 数据分析三剑客之 Pandas(一):认识 Pandas 及其 Series、DataFrame 对象
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- python数据分析-pandas学习
文章目录 一.pandas环境的搭建 1.pandas 简介 2.pandas安装和调用 二.pandas学习 1.pandas简介 2.pandas学习资源 3.pandas核心数据结构 4.Ser ...
最新文章
- 跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP
- 深度学习对抗样本的八个误解与事实
- path.join 与 path.resolve 的区别
- 菜鸟CEO万霖:双11包裹量将继续增长 已建立更高效的物流枢纽
- 【单目标优化求解 】基于matlab烟花算法求解单目标问题【含Matlab源码 1599期】
- MyBatis关联映射
- 34个有用的 JavaScript 库,现在就可以用起来
- RS485接收数据后发送乱码
- c语言 常量表达式,常量表达式(什么叫常量表达式)
- PHP编译安装常见错误解决
- 遭遇Trojan PSW OnlineGames Trojan HiJack a Trojan PSW ZhuXian
- qq围棋 android,腾讯围棋(QQ围棋)
- XMLHttpRequest对象的readyState与status
- 微信运动步数一键98800,最新方法来袭!11.01号更新
- 关于word2016中mathtype无法使用以及“由于宏安全设置,无法找到宏或宏已被禁用”的解决方案
- 2048小游戏lua
- 谨防网上骗子社会工程!
- Unity3d 坦克AI_自动寻怪,自动追击脚本参考
- java m老师小讲堂——画板
- 内网穿透 NPS 站点 并添加HTTPS
热门文章
- 拳皇97 for Mac(街机格斗游戏)
- 论文笔记 ISCC 2019|BGP Dataset Generation and Feature Extraction for Anomaly Detection
- WordPress建站8款插件Niche站必备
- c++day03 构造中调用构造函数
- 【知识蒸馏】Masked Generative Distillation
- [附源码]计算机毕业设计JAVAjsp智慧农产品朔源系统
- 安装启动zabbix
- 网站出现大量垃圾反链的原因以及解决方法
- mysql 无我 非我_无我的源头,《庄子•齐物论》原文朗读。非彼无我,非我无所取。...
- 一个专注极简的导航主页