最新要闻
- 2023年安卓机皇!聊聊三星S23系列与前代有哪些不同
- 当前观点:高颜值+顶级做工!铭瑄RTX 4080 iCraft OC16G瑷珈显卡评测:三风扇稳压71℃
- 全球讯息:奥迪E-Tron撞车 电池包撞飞后起火!官方:不清楚是安全功能还是隐患
- 天天观热点:投屏480p、禁HDMI被吐槽割韭菜!爱奇艺利润将暴增 外资力挺
- 全球微速讯:《森林之子》PC配置需求公布 1080Ti显卡就能爽玩
- 当前动态:Wine 8.1版本正式发布:首次默认启用“Windows 10”前缀
- 为博眼球太奇葩 四川男子用扳手代替方向盘开车拍视频:结果被扣4分
- 今日热闻!苹果刚发布的2299元新品HomePod 2仅支持老掉牙Wi-Fi 4:原因不服不行
- “聪明的”ChatGPT 是否拥有生命?
- 天天热议:速度是根本!威刚UE800 U盘评测:真正跑满1GB/s
- 报道:韩国刷新世界最低生育率纪录:无人店铺数量持续增长 人工智能需求强
- 苹果营收4年来首降 库克:裁员是最后手段
- 低于20万会买吗?特斯拉新款Model 3外形曝光:续航、动力大增
- 天天热讯:今晚油价或迎年内第二次上调:预计每升上涨0.17元
- 播报:奔驰销售吐槽:向每位进店客户推荐买新能源 直到客户崩溃或打我
- 全球焦点!微软回应Xbox 360商店关闭:只是搞错了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Pandas练习
背景介绍
本数据集包括了2015年至2017年我国36个主要一线城市、特区的一些年度数据,包括产值、人口、就业、教育、医疗、经济贸易、房地产投资等方面。
【资料图】
包含文件:
- 2015年国内主要城市年度数据.csv
- 2016年国内主要城市年度数据.csv
- 2017年国内主要城市年度数据.csv
数据特征
数据集名称 | 数据类型 | 特征数 | 包含城市数量 | 缺失值 | 相关人物 |
---|---|---|---|---|---|
国内主要城市年度数据 | 数值型、字符型 | 13 | 36 | 有 | 描述性分析(可视化)等 |
数据属性
NO | 字段名称 | 数据类型 | 字段描述 |
---|---|---|---|
1 | 地区 | String | 城市名称 |
2 | 年份 | Int | 数据所对应的时间 |
3 | 国内生产总值 | Float | 单位:亿元 |
4 | 第一产业增加值 | Float | 单位:亿元 |
5 | 第二产业增加值 | Float | 单位:亿元 |
6 | 第三产业增加值 | Float | 单位:亿元 |
7 | 社会商品零售总额 | Float | 单位:亿元 |
8 | 货物进出口总额 | Float | 单位:百万美元 |
9 | 年末总人口 | Float | 单位:万人 |
10 | 在岗职工平均工资 | Int | 单位:元 |
11 | 普通高等学校在校学生数 | Float | 单位:万人 |
12 | 医院、卫生院数 | Int | 单位:个 |
13 | 房地产开发投资额 | Float | 单位:亿元 |
数据来源
国家统计局:https://data.stats.gov.cn/easyquery.htm?cn=E0105分析非常常用的知识点,知识点概述如下:
1、数据集基本信息探索 数据基本情况 数量探索 相关性分析 绘总统计 数据抽样2、应用函数 apply3、合并数据4、索引问题5、排序问题6、重复数据处理7、数据分组8、处理缺失值9、选择数据10、pandas时间序列11、pandas可视化
1、pandas 基本信息探索
(1) 基本情况
import pandas as pdimport numpy as npfrom matplotlib import pyplot as plt
中文设置
plt.rcParams["font.sans-serif"] = ["SimHei"]df = pd.read_csv("data/2015年国内主要城市年度数据.csv")print("--" * 20, "\n【1】数据集基本情况探索")
print("\n>>>样本形状:\n", df.shape) # 样本形状、样本数、特征数探索print("\n>>>样本索引、列名探索:\n", df.index, df.columns) # 样本索引、索引转换成列表、列名探索print("\n>>>某列类型、全部样本类型探索:\n", df["年份"].dtypes, "\n", df.dtypes) # 某列类型、全部样本类型探索print("\n>>>")print(df.info())
(2) 数量探索
探索某列、全部样本非 NA 值的数量
print(df["年份"].count(), "\n", df.count())
探索某列的值,也可以探索全部样本的值
df["年份"].values
value_counts探索某列中各元素值出现的次数(只能探索某列的)
count 计算每列或每行的非NA单元格。
df["第一产业增加值"].value_counts().head()df["年份"].value_counts().head()
unique()函数用于获取Series对象的唯一值。唯一性按出现顺序返回。基于哈希表的唯一,因此不排序
print("唯一值:\n",df["国内生产总值"].unique())
nunique唯一值得数量
print("\n唯一值的数量:\n",df["国内生产总值"].nunique())print("唯一值:\n",df["年份"].unique())
nunique唯一值得数量
print("\n唯一值的数量:\n",df["年份"].nunique())
探索每一列缺失值数量
print("探索每一列缺失值数量:\n",df.isnull().sum())
不是缺失值数量
print("\n不是缺失值数量:\n",df.notnull().sum())
某列取值、多列取值
print("取出一列:\n", df["年份"].head(),"类型:",type(df["年份"]))
取出多列:
print("\n取出多列:\n", df[["地区", "年份"]].head(), "类型:", type(df[["地区", "年份"]]))
(3) 相关性分析
探索特征之间相关性
探索某列、全部样本的方差
print("年末总人口方差:\n", df["年末总人口"].var())
print("\n总体数据方差:\n", df.var(), )
探索某列、全部样本的标准差
print("年末总人口标准差:\n", df["年末总人口"].std())
print("\n总体数据标准差:\n", df.std(), )
(4) 汇总统计
样本数据汇总统计
每一列求和
print("每一列求和:\n", df.sum())
某列逐行累加(可以全部样本每一列都累加)
print(df["地区"].cumsum().head())
最大最小值
print("最大值>>>\n", df.max().head())print("\n最小值>>>\n", df.min().head())
返回 "国内生产总值" 列最大、最小值所对应的索引号
print("\n>>>", df["国内生产总值"].idxmax(), "\n", df["国内生产总值"].idxmin())print("\n>>>", df.mean(), df.median()) # 平均值、中位数
汇总统计信息,是上面方法的统一
print("\n>>>", df.describe().T)df.describe()for (columnName, columnData) in df.iteritems():print("Colunm Name : ", columnName)print("Column Contents : ", columnData.values)print("===============")
(5) 数据抽样
有时候我们做研究分析或者数据量过大时,只希望抽取一部分数据做研究,因此要进行数据抽样处理
replace允许或不允许对同一行进行多次采样,默认就是False
data = df.sample(n=5, replace=False) # 不放回随机抽样 5 个数据data
2、pandas 中的应用函数 apply
我们发现数据集中有浮点型数据,但是我们只需要整形数据,因此我们很有必要使用应用函数对原数据进行类型转换
def fun(x):x = int(x)return x
data1 = df["国内生产总值"].apply(fun)
data1.head()data2 = df["地区"].apply(lambda x: x + "QQ")data2.head()data3 = df.iloc[:, :].apply(np.sum)data3.head()
3、合并数据
df1 = pd.read_csv("data/2015年国内主要城市年度数据.csv")df2 = pd.read_csv("data/2016年国内主要城市年度数据.csv")df3 = pd.read_csv("data/2017年国内主要城市年度数据.csv")
通常用来连接DataFrame对象。默认情况下是对两个DataFrame对象进行纵向连接,
当然通过设置参数,也可以通过它实现DataFrame对象的横向连接
df_1 = pd.concat(objs=[df1, df2, df3]) # 合并数据,以行的维度合并df_1.sample(n=7, replace=False) # 随机不放回抽样 7 个数据
以指定值合并,在本案例中不适用
df_2 = pd.merge(left=df1, right=df2, on="地区", how="outer")df_2
4、索引问题
单个索引,inplace=False 不覆盖的情况下,要使用一个变量 来间接操作
设置索引时的情况
d = df_1.set_index(keys="年份")print(d.iloc[: , :4].head())
注意在取消索引操作时,inplace=True 设置为 True,以便后面可以查看到取消后的情况
d.reset_index(inplace=True)d.iloc[: , :4].head() # 取消索引时的情况
多级索引
inplace=True 覆盖的情况下,直接使用 df_1 访问.
注意:
在 inplace=True 覆盖原数据情况下,运行第 2 或多次, 就会出现报错的情况,同时代码并没有语法错误, 原因是原数据被覆盖了。解决方法是:重新运行所有代码, 如果不是很必要,尽量不要执行覆盖原数据的操作
df_1.set_index(keys=["地区", "年份"], inplace=True) # 设置多级索引,覆盖原数据print(df_1.iloc[: , :4].head())
df_1.reset_index(inplace=True)df_1.iloc[: , :4].head()
5、排序问题
通过索引排序
data = df_1.sample(n=5, replace=False) # 通过随机不放回抽样 5 个数据
通过索引排列,升序排列、不覆盖原数据、如有缺失值则放在前面
data.sort_index(ascending=True, na_position="first")
多重索引的dataframe
dataframe.sort_index(level=[0,1],ascending=[False,True])
- level 按指定索引级别的值排
通过指定列的值排序
df_1.sort_values(by=["地区", "年份"], ascending=[True, False], inplace=False, na_position="first").head(7)
6、重复数据处理
返回唯一值
print("\n>>>", df_1["地区"].unique()) # 唯一值元素print("\n>>>\n", df_1.nunique()) # 唯一值数量
重复值处理
查找重复值
print(">>>\n", df_1.duplicated(subset=["年份"], keep="first").head())
删除重复值
print(">>>\n", df_1.drop_duplicates(subset=["年份"], keep="first", inplace=False).iloc[:, :4])
查找重复索引
print("\n>>>", df_1.index.duplicated())
7、数据分组
指定一列是聚合列,如:年份
"地区"作为索引分组,"年份"与分组列"地区"聚合
第一种方法
df_1.groupby(by=["地区"], as_index=True).agg({"年份": ["max", "min", "median"]}).head()
第二种方法,两种方法是等效的
df_1.groupby(by=["地区"], as_index=True).年份.agg(["max", "min", "median"]).head()
指定多列列是聚合列,如:年份、国内生产总值
df_1.groupby(by=["地区"], as_index=True).agg({"年份": "max", "国内生产总值": "describe"}).head()
没有指定聚合列,则代表选择所有列
返回所有列中的最大值
df_1.groupby(by=["地区"], as_index=True).max().head()
8、处理缺失值
在上面的探索中,发现有缺失值,因此有必要进行处理
查看所有数据的缺失情况
df_1.isnull().sum()
第一种方法,删除缺失值数据
df_1.dropna().isnull().sum()
第二种方法,使用填充法填充缺失值
print("\n>>>\n", df1.fillna(method="ffill").head()) # 使用缺失值的前一个值填充(前向填充)print(">>>\n", df1.fillna(method="bfill").head()) # 使用缺失值的后一个值填充(后向填充)""" 平均值填充(所有列填充) """print(">>>\n", df_1.fillna(value=df_1.mean()).head())
9、选择指定的数据
按标签选择
按行的序号、列的名称选择df.loc[:, "列名"]/df.loc[[0,1, 2], ["列名1", "列名2"]]
print(">>>\n", df_1.loc[:, "年份"].head())print(">>>\n", df_1.loc[[0, 4, 7], ["年份", "国内生产总值"]].head())
按位置选择
按行位置(序号)、列位置选择df.iloc[:, :]/da.iloc[[0, 1, 2], [2, 3, 4]]
print(">>>\n", df_1.iloc[:3, :3])print(">>>\n", df_1.iloc[[1, 34, 56], [2, 4, 8]])
按条件来选择
筛选出符合条件的列df_1 = df_1.set_index(["地区","年份"])
国内生产总值大于15678的数据
df_1[df_1["国内生产总值"] > 15678].head()
选择任一值大于1000的列
df_1.loc[:, (df_1>10000).any()]
选择所有值大于1000的列
df_1.loc[:, (df_1>1000).all()]df_1.loc[:, df_1.isnull().any()] # 选择含 NaN值的列df_1.loc[:, df_1.notnull().all()] # 选择不含NaN值的列
query和filter
在使用pandas进行数据分析时,经常遇到需要过滤信息的场景,此时我们可以用到2种函数,query和filter。
query函数
query函数我认为类似sql语言中的where,可以对dataframe中的特定column进行筛选。具体语法如下:df.query("列名 判断 值"),如df.query("column1 > 2 and column 2<1")等于df[df[列名] 判断 值],如 df[df[column1]>2 & df[column2]<1]
filter函数
filter常规用法,在pandas说明里很好找到:DataFrame.filter(items=None, like=None, regex=None, axis=None)#items对列进行筛选#regex表示用正则进行匹配#like进行筛选#axis=0表示对行操作,axis=1表示对列操作
选择指定的列,类似于 df[["某列", "某列"]]
df_1.filter(items=["地区", "年份"]) # 选择指定的列df_1.filter(like="产业", axis=1) # 选择含有 "产业" 的列
完整代码
from random import sampleimport pandas as pddf = pd.read_csv("./2015年国内主要城市年度数据.csv")# values_countv_c = df["年份"].value_counts()# print(v_c) # 2015 36# Name: 年份, dtype: int64# 唯一值un = df["年份"].unique() # 唯一值# print(un) # [2015]un_num = df["年份"].nunique() # 唯一值的数量# print(un_num) # 1# 探索缺失值# print(df.isnull().sum()) # 缺失# print(df.notnull().sum()) # 完整# 相关性分析# print("年末总人口方差:\n", df["年末总人口"].var())# print("总体数据方差:\n", df.var())# print("年末总人口标准差:\n", df["年末总人口"].std())# print("总体数据标准差:\n", df.std())# 循环取出dec的值# for (column_name, column_data) in df.describe().iteritems():# print(column_name + ": ")# print(column_data.values)# 数据采样# sample_data = df.sample(n=5, replace=False)# print(sample_data)# print("================")# 数据合并df1 = pd.read_csv("./2015年国内主要城市年度数据.csv")df2 = pd.read_csv("./2016年国内主要城市年度数据.csv")df3 = pd.read_csv("./2017年国内主要城市年度数据.csv")df_1 = pd.concat(objs=[df1, df2, df3], axis=0)sample_df_1 = df_1.sample(n=6, replace=False)# print(sample_df_1)# 将年份设置成索引df11 = df.set_index("年份", inplace=False)# print(df11.iloc[:,:4].head())df12 = df11.reset_index(inplace=False)# print(df12.iloc[:,:4].head())# 找出重复值print(df_1.duplicated(subset=["年份"], keep="last")) # 最后一个出现的重复值为Falseprint(df_1.duplicated(subset=["年份"], keep="first")) # 第一个出现的重复值为Falseprint(df_1.duplicated(subset=["年份"], keep=False)) # 重复值都为True# 删除重复值print(df_1.head())df_drop_val = df_1.drop_duplicates(subset=["年份"], keep="first")print(df_drop_val)#
-
当前观点:高颜值+顶级做工!铭瑄RTX 4080 iCraft OC16G瑷珈显卡评测:三风扇稳压71℃
高颜值+顶级做工!铭瑄RTX4080iCraftOC16G瑷珈显卡评测:三风扇稳压71℃
来源: Pandas练习
2023年安卓机皇!聊聊三星S23系列与前代有哪些不同
当前观点:高颜值+顶级做工!铭瑄RTX 4080 iCraft OC16G瑷珈显卡评测:三风扇稳压71℃
全球讯息:奥迪E-Tron撞车 电池包撞飞后起火!官方:不清楚是安全功能还是隐患
天天观热点:投屏480p、禁HDMI被吐槽割韭菜!爱奇艺利润将暴增 外资力挺
全球微速讯:《森林之子》PC配置需求公布 1080Ti显卡就能爽玩
看点:微信对话生成器,生成微信聊天记录,聊天记录生成器
环球快看:跳表java实现(可直接运行)
热消息:[概率论与数理统计]笔记:5.5 单正态总体的参数假设检验
依赖注入(DI注入)
当前动态:Wine 8.1版本正式发布:首次默认启用“Windows 10”前缀
为博眼球太奇葩 四川男子用扳手代替方向盘开车拍视频:结果被扣4分
今日热闻!苹果刚发布的2299元新品HomePod 2仅支持老掉牙Wi-Fi 4:原因不服不行
“聪明的”ChatGPT 是否拥有生命?
天天热议:速度是根本!威刚UE800 U盘评测:真正跑满1GB/s
世界新动态:【算法训练营day38】动态规划理论基础 LeetCode509. 斐波那契数 LeetCode70. 爬楼梯 LeetCode746. 使用最小花
报道:韩国刷新世界最低生育率纪录:无人店铺数量持续增长 人工智能需求强
苹果营收4年来首降 库克:裁员是最后手段
低于20万会买吗?特斯拉新款Model 3外形曝光:续航、动力大增
天天热讯:今晚油价或迎年内第二次上调:预计每升上涨0.17元
播报:奔驰销售吐槽:向每位进店客户推荐买新能源 直到客户崩溃或打我
Webpack解析与讲解
全球焦点!微软回应Xbox 360商店关闭:只是搞错了
全球最新:每逢佳节胖三斤 专家提醒:节后运动“甩膘”要注意三点
天天快资讯丨el表达式注入漏洞
环球快报:13倍浓缩:日本隅田川胶囊咖啡1.16元/杯史低
充会员才解封?爱奇艺回应一号三用被封:技术故障 跳转错误页面
《卧龙》天柱山介绍公开:红晶小姐姐美如画!
天天热点!对Intel穷追猛打!AMD Zen4c 128核心上半年杀来
突然暴雷!世界第一辆量产太阳能汽车 黄了
讯息:操作系统的体系结构
天天热头条丨2023年新势力首月销量成绩单:理想最显眼 零跑暴跌
全球新资讯:蔚来大降价超10万?总裁回应:没有 展车最多2.4万优惠
【全球报资讯】比尔·盖茨盛赞ChatGPT:称其“不亚于互联网诞生”
环球视点!女子拍抖音私闯已关闭自然保护区 或处5000元以下罚款
一个手机号搞定!微信正式支持注册小号:生活、工作能分开吗?
世界语言的分布是什么?世界语言难度排行
三星手机怎么截屏图片?三星手机如何防盗?
韩国游戏公司有哪些?韩国游戏公司排名
穿越火线什么时候出的?穿越火线怎么安装?
饱和石灰水是什么意思?饱和石灰水变浑浊的原因是什么?
诺基亚5000刚出来是多少钱?诺基亚5000手机参数
宽带连接怎么创建?宽带连接怎么设置到桌面上?
一次JSF上线问题引发的MsgPack深入理解,保证对你有收获
全球快看点丨springboot实战——总结
全球观点:(笔记)【NTP系列:05】NTP时间同步失败:Windows(W32Time)作为NTP时钟源服务端,Linux作为客户端
[概率论与数理统计]笔记:5.4 假设检验概述
西门子手机怎么样?西门子手机哪年进入中国?
联想y470双显卡驱动怎么装?联想y470双显卡怎么切换?
dota2怎么改成国服?DOTA2配置要求是什么?
世界新动态:传奇大佬、联想PC全球第一的功臣蒋凡可·兰奇去世 享年69岁
不叫003 极氪第三款车型ZEEKR X官图发布:20万买不
世界观焦点:智商碾压 新养的边牧把养5年金毛拐跑丢弃
当前滚动:办公党等到了!小米笔记本12.4二合一发布:2.5K触屏 2999元
荣耀Magic5通过3C认证:1/1.1英寸主摄、标配66W充电头
世界关注:非常强大的gsap动画
2023年值得收藏的开源或免费的web应用防火墙
keycloak~JWT各字段说明及扩展字段的方法
苹果业绩暴雷:iPhone卖不动了!库克感谢国人支持 要降价刺激销量?
《巫师3:狩猎》4.01版更新上线:光追性能更强 帧率又高了
美国新造车告急:造一辆亏23万 CEO深感抱歉
极氪009被吐槽像灵车、棺材 车主亲身评测:死人躺并不舒适
比亚迪又一大杀器 全新海鸥出街被拍:超个性涂装上身
快看:iPhone 12/13/14灵魂设计师离职 苹果直接取消工业设计总监职位
动态焦点:男孩为网游充值4万 家长控诉腾讯监控不力未尽义务:该不该退钱?
全球微动态丨国内油价今晚调整 或迎兔年“第一涨”:加满一箱预计多花8.5元
环球滚动:20个小猫身上笑死人的奇葩花纹:只有你想不到!
萌萌哒的兔子竟是“头号杀手”!澳大利亚曾研制病毒专杀兔兔
全球新资讯:澳大利亚搞丢一枚剧毒放射性胶囊 相关单位仅被罚款1000块:下不为例?
专家称年轻人工资低可能是能力不够引争议:企业点赞 打铁还应自身硬
世界今热点:触控体验碾压iPhone 14 Pro Max!一加Ace 2做到了
火箭弹电子版领取处>>(密码博主昵称 全部小写)
天天观点:Pandas分析泰坦尼克号生还比例
天天新资讯:图卷积的演变-从谱图卷积到GCN
.NET Core 3.1 通过 Web Service 读写 Salesforce 数据
【全球新要闻】打开它 游戏性能飙升46%!NVIDIA为啥不要呢?
每日资讯:麦当劳赢了:世界第一美食APP
即时看!地球最稀有矿石就一个标本!已知6000多种矿石就它特殊
【天天速看料】《流浪地球2》票房破30亿!下一部或两年后上映
最新消息:这两年大家都在吃瘪 结果微软闷声发大财了!全靠它
视焦点讯!Spring中Bean的生命周期
一名老了的普通程序员的未来在哪里
元宵节将至:北京周五晚高峰将达严重拥堵
焦点报道:334个小核心反超AMD!Intel下代至强“增肥”70%
出厂安卓13 三星Galaxy S23承诺四次大版本迭代:包你升级Android 17
世界热点!在欧洲大陆上奔跑的中国新能源车正越来越多!当地人慌了
当前热讯:编写干净代码的 9 条必须知道的规则
有钱玩家真多!越来越多Steam用户配置RTX 4090显卡:已超2万人
Python教程:OS与sys模块用法教程
世界看点:mybatis-plus代码生成器
女子误用八千元一斤茶叶煮茶叶蛋 以为过期:网友称这茶叶蛋真吃不起
天天观天下!专家:年轻人工资低是因为能力不够 很少有人反思这问题
全球微速讯:爱奇艺回应3台设备登录账号被封:改密码能解封 不用充值更贵会员
全球滚动:PS游戏启动失败?PS日本教你如何进行问题排查
剧版一集就被砍之后 DC电影版《沼泽怪物》物色导演
订单破5万!比亚迪腾势D9登35万以上新能源豪华MPV销量第一
环球微动态丨导演评价《狂飙》:可能是可以刻在自己墓碑上的一部戏
每日快报!12.4万的保时捷带来诸多疑问 故意营销质疑越来越多!
造车新势力第一!广汽埃安1月交付10206辆 今年冲击60万辆
天天观热点:CSS 清除浮动