文章目录

  • 一、Pandas数据分析之展示
    • 1.Pandas的概念和基本使用
    • 2.排序
    • 3.按多列排序
    • 4.添加一列
    • 5.快速元素搜索
    • 6.按列连接(join)
    • 7.按列分组
    • 8. 数据透视表
    • 9. Pandas性能
      • 9.1 Pandas通用比较
      • 9.2 Pandas详细比较

一、Pandas数据分析之展示

1.Pandas的概念和基本使用

Pandas是一种数据分析工具,是Python中非常流行的库之一,主要用于数据清洗、数据转换、数据分析和数据可视化。Pandas提供了两种重要的数据结构,分别是Series(一维的数据结构)和DataFrame(二维的数据结构)。

Pandas的功能包括:

  • 数据导入和导出:支持从各种数据源中读取数据,如Excel、CSV、SQL等,同时也可以将数据导出到这些源中。

  • 数据预处理:包括缺失值处理、重复值处理、异常值处理、数据类型转换等。

  • 数据分析:包括描述统计分析、聚合分析、透视表分析、时间序列分析等。

  • 数据可视化:可以使用Pandas提供的可视化工具,或与Matplotlib、Seaborn等可视化库结合使用,进行数据可视化分析。

下面是一个示例,首先需要安装pandas库:

pip install pandas

导入库并创建一个DataFrame:

import pandas as pddata = {'name': ['Alice', 'Bob', 'Charlie', 'David'],'age': [25, 32, 18, 47],'gender': ['F', 'M', 'M', 'M'],'salary': [5000, 8000, 3500, 6000]}df = pd.DataFrame(data)

查看DataFrame的数据:

print(df)

输出结果如下:

       name  age gender  salary
0     Alice   25      F    5000
1       Bob   32      M    8000
2   Charlie   18      M    3500
3     David   47      M    6000

对数据进行描述统计分析:

print(df.describe())

输出结果如下:

             age       salary
count   4.000000     4.000000
mean   30.500000  5625.000000
std    11.225255  2062.048144
min    18.000000  3500.000000
25%    23.250000  4625.000000
50%    28.500000  5500.000000
75%    35.750000  6500.000000
max    47.000000  8000.000000

对数据进行透视表分析:

pivot = df.pivot_table(index='gender', values='salary', aggfunc='mean')
print(pivot)

输出结果如下:

           salary
gender
F            5000
M            5833

对数据进行数据清洗:

df.drop_duplicates(inplace=True)
df.dropna(inplace=True)

上述代码删除了DataFrame中的重复值和空值。

最后,可以将数据导出到Excel文件中:

df.to_excel('data.xlsx', index=False)

2.排序

使用Pandas按列排序更具可读性,如下所示:

import numpy as np
import pandas as pd#----------------------------数据----------------------------
np_data=np.array([[1,10,100],[2,20,150],[3,15,200],[4,15,80]])df_data = pd.DataFrame([[1,10,100],[2,20,150],[3,15,200],[4,15,80]],columns=['id','price','weight'],dtype=float)#----------------------------np排序----------------------------
np_data=np_data[np.argsort(np_data[:,1])]
print(np_data)
print('---------------------------------------------------------')
#----------------------------pd排序----------------------------
df_data=df_data.sort_values('price')
print(df_data)

这里argsort(a[:,1])计算使a的第二列按升序排序的排列,然后a[…]相应地对a的行重新排序。Pandas可以一步完成。

3.按多列排序

如果我们需要使用weight列来对价格列进行排序,情况会变得更糟。这里有几个例子来说明我们的观点:

import numpy as np
import pandas as pd#----------------------------数据----------------------------
np_data=np.array([[1,10,100],[2,20,150],[3,15,200],[4,15,80]])df_data = pd.DataFrame([[1,10,100],[2,20,150],[3,15,200],[4,15,80]],columns=['id','price','weight'],dtype=float)#----------------------------np排序----------------------------
np_data=np_data[np.argsort(np_data[:,2])]
np_data=np_data[np.argsort(np_data[:,1],kind='stable')]
print(np_data)
print('---------------------------------------------------------')
#----------------------------pd排序----------------------------
df_data=df_data.sort_values(['price','weight'])
print(df_data)

在NumPy中,我们先按重量排序,然后再按价格排序。稳定排序算法保证第一次排序的结果不会在第二次排序期间丢失。NumPy还有其他实现方法,但没有一种方法像Pandas那样简单优雅。

4.添加一列

使用Pandas添加列在语法和架构上要好得多。下面的例子展示了如何操作:

import numpy as np
import pandas as pd#----------------------------数据----------------------------
np_data=np.array([[1,10,100],[2,20,150],[3,15,200],[4,15,80]])df_data = pd.DataFrame([[1,10,100],[2,20,150],[3,15,200],[4,15,80]],columns=['id','price','weight'],dtype=float)#----------------------------np添加列----------------------------
np_data=np.column_stack((np_data,np_data[:,1]/np_data[:,2]))
print(np_data)
print('---------------------------------------------------------')
#----------------------------pd添加列----------------------------
df_data['price_pre_gram']=df_data.price/df_data.weight
print(df_data)

Pandas不需要像NumPy那样为整个数组重新分配内存;它只是添加了对新列的引用,并更新了列名的registry

5.快速元素搜索

在NumPy数组中,即使你查找的是第一个元素,你仍然需要与数组大小成正比的时间来查找它。使用Pandas,你可以索引你期望被查询最多的列,并将搜索时间减少到一个常量。

import numpy as np
import pandas as pd#----------------------------数据----------------------------
np_data=np.array([[100,10,100],[314,20,150],[213,15,200],[432,15,80]])df_data = pd.DataFrame([[100,10,100],[314,20,150],[213,15,200],[432,15,80]],columns=['id','price','weight'],dtype=float)#----------------------------np添加列----------------------------
value=np_data[np.where(np_data==213)[0][0]][2] # 时间复杂度 O(N)
print(value)
print('---------------------------------------------------------')
#----------------------------pd添加列----------------------------
value=df_data.loc[df_data.id==213,'weight'].item() # 时间复杂度 O(N)
print(value)
df_data.set_index('id',inplace=True)
value=df_data.loc[213,'weight'] # 时间复杂度 O(1)
df_data.reset_index(inplace=True)
print(value)

index列有以下限制。

  • 它需要内存和时间来构建。

  • 它是只读的(需要在每次追加或删除操作后重新构建)。

  • 这些值不需要是唯一的,但是只有当元素是唯一的时候加速才会发生。

  • 它需要预热:第一次查询比NumPy稍慢,但后续查询明显快得多。

6.按列连接(join)

如果你想从另一张表中获取基于同一列的信息,NumPy几乎没有任何帮助。Pandas更好,特别是对于1:n的关系。

import numpy as np
import pandas as pd#----------------------------数据----------------------------sales = pd.DataFrame([['John',1],['Silvia',3],['Andrew',1]],columns=['client','product_id'],dtype=float)products = pd.DataFrame([[1,'banana'],[2,'apple'],[3,'orange']],columns=['id','name'],dtype=float)#----------------------------pd添加列----------------------------
value=sales.join(products.set_index('id'),on='product_id')
print(value)

Pandas join具有所有熟悉的“内”、“左”、“右”和“全外部”连接模式。

7.按列分组

数据分析中的另一个常见操作是按列分组。例如,要获得每种产品的总销量,你可以这样做:

import numpy as np
import pandas as pd#----------------------------数据----------------------------sales = pd.DataFrame([['John',1,5],['Silvia',3,3],['Andrew',1,4]],columns=['client','product_id','quantity'],dtype=float)products = pd.DataFrame([[1,'banana'],[2,'apple'],[3,'orange']],columns=['id','name'],dtype=float)#----------------------------pd添加列----------------------------
# join
value=sales.join(products.set_index('id'),on='product_id')
print(value)
# group
value=value.groupby('name',as_index=False).sum('quantity')
print(value)

除了sum之外,Pandas还支持各种聚合函数:mean、max、min、count等。

8. 数据透视表

Pandas最强大的功能之一是“枢轴”表。这有点像将多维空间投影到二维平面上。

import numpy as np
import pandas as pd#----------------------------数据----------------------------sales = pd.DataFrame([['John','bananas',5],['John','oranges',3],['Silvia','bananas',4],['Silvia','oranges',2]],columns=['client','product','quantity'],dtype=float)#----------------------------pd添加列----------------------------pivot_value=sales.pivot(index='client',columns='product',values='quantity')
print(pivot_value)

虽然用NumPy当然可以实现它,但这个功能没有开箱即用,尽管它存在于所有主要的关系数据库和电子表格应用程序(Excel,WPS)中。

Pandas用df.pivot_table将分组和旋转结合在一个工具中。

简而言之,NumPy和Pandas的两个主要区别如下:

9. Pandas性能

9.1 Pandas通用比较


对于小数组(少于100行),Pandas似乎比NumPy慢30倍,对于大数组(超过100万行)则慢3倍。

9.2 Pandas详细比较

Pandas在这些基本操作方面非常缓慢,因为它正确地处理了缺失值。Pandas需要NaNs (not-a-number)来实现所有这些类似数据库的机制,比如分组和旋转,而且这在现实世界中是很常见的。在Pandas中,我们做了大量工作来统一所有支持的数据类型对NaN的使用。根据定义(在CPU级别上强制执行),nan+anything会得到nan。所以

>>> np.sum([1, np.nan, 2])
nan

但是

>>> pd.Series([1, np.nan, 2]).sum()
3.0

一个公平的比较是使用np.nansum代替np.sum,用np.nanmean而不是np.mean等等。


对于超过100万个元素的数组,Pandas的速度是NumPy的1.5倍。对于较小的数组,它仍然比NumPy慢15倍,但通常情况下,无论操作在0.5 ms还是0.05 ms内完成都没有太大关系——无论如何它都是快速的。

对于超过100万个元素的数组,Pandas的速度是NumPy的1.5倍。对于较小的数组,它仍然比NumPy慢15倍,但通常情况下,无论操作在0.5 ms还是0.05 ms内完成都没有太大关系——无论如何它都是快速的。

【愚公系列】2023年07月 Pandas数据分析之展示相关推荐

  1. 【愚公系列】2023年07月 Pandas数据分析之MultiIndex

    文章目录 前言 一.MultiIndex 1.MultiIndex的概念 2.分组 3.类型转换 4.使用多重索引构建一个Dataframe 5.使用多重索引进行索引 6.叠加与拆分 7.如何防止叠加 ...

  2. 【愚公系列】2022年01月 华为鸿蒙OS-03-四种模式开发实操

    文章目录 前言 一.使用JS语言开发(传统代码方式) 1.index页面源码 2.details页面源码 二.使用JS语言开发(低代码方式) 1.新建工程:注意选择 2.选择低代码新建页面 3.页面分 ...

  3. 2023年07月编程语言流行度排名

    点击查看最新编程语言流行度排名(每月更新) 2023年07月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎 ...

  4. 【愚公系列】回顾2022年技术博客的总结与展望

    文章目录 前言 一.回顾2022年的活动和成就 1.2022年所做的事 2.2022年收获和成就 二.分析2022年的表现 1.过去一年优缺点分析 2.过去一年表现认同度 三.展望2023年的计划 1 ...

  5. 【愚公系列】(HDC.Cloud)华为开发者大会游记

    文章目录 前言 一.(HDC.Cloud)华为开发者大会游记 1.受邀参加 2.开发者大会首页 3.第一天 4.第二天 5.第三天 总结 前言 HDC.Cloud华为开发者大会是由华为举办的一年一度的 ...

  6. 【愚公系列】华为产品测评官-开发者之声(CodeArts产品流程体验)

    文章目录 前言 一.华为云CodeArts产品体验 1.软件开发生产线使用流程 1.1 配置项目 1.2 配置代码仓库 1.3 配置流水线 2.使用软件开发生产线快速搭建项目(ECS篇) 2.1 前提 ...

  7. 【愚公系列】2023年07月 WPF+上位机+工业互联 002-WPF布局控件

    文章目录 前言 一.WPF布局控件 1.无边框设计 2.理解布局 2.1 WPF的布局处理 2.1 布局原则 2.3 布局过程 3.布局控件 3.1 Grid控件 3.1.1 属性 3.1.2 案例 ...

  8. 【愚公系列】2023年07月 WPF+上位机+工业互联 015-属性绑定(源更新触发器)

    文章目录 前言 一.源更新触发器 1.DataContext数据源 1.1 DataContext代码绑定 1.2 DataContext界面绑定 1.3 自定义集合遍历 3.源更新触发器 前言 WP ...

  9. 【愚公系列】2023年02月 .NET CORE工具案例-Lunar日历转换

    文章目录 前言 一.Lunar日历转换 1.安装包 2.相关代码 3.运行 二.用途 1.年历 2.月历 3.佛历 4.道历 5.上班摸鱼 前言 真正的日历产生,大约在一千一百多年前的唐顺宗永贞元年, ...

最新文章

  1. Python 网络爬虫 001 (科普) 网络爬虫简介
  2. 未来的数据中心(三)
  3. Python之ffmpeg-python:ffmpeg-python库的简介、安装、使用方法之详细攻略
  4. python+xlrd+echarts数据可视化demo
  5. Docker Client(Docker 客户端)
  6. 用非递归方式实现二叉树先序便利
  7. 比较排序算法的时间复杂度 c语言,c语言四种排序算法时间复杂度比较(10页)-原创力文档...
  8. Ubuntu更换gnome桌面环境后不能root登录
  9. 如何快速搭建自己的独立站?
  10. java socket 握手_TCP建立连接三次握手过程详解(wireshark截图、java socket源码)
  11. 批量自动化配置Dell服务器idrac管理口IP
  12. Python入门--字典元素的操作,key的判断(in not in),字典元素删除(del),字典元素的增加,清空(clear()),修改
  13. windows上怎么用libnfc的库函数编程
  14. origin绘制双Y轴柱状图
  15. 学习突围5 - 关于计划
  16. Hystrix组件学习(一)
  17. 开发微信支付功能之微信限制金额说明
  18. 与小卡特一起学python 第18章 一种新的输入-事件
  19. 阿里云esc服务器上装hadoop
  20. AOC 27G3Z 评测

热门文章

  1. 人民币兑美元料宽幅震荡
  2. css_跳动的心制作过程
  3. 被隐藏的mac超好看壁纸
  4. 我们团队在 Vue 3 Dev Tools 的帮助下,调试效率有了质的飞跃!
  5. 小米3Android密码怎么解吗,小米3忘了开机锁屏的解锁密码怎么办
  6. CSDN 博客板块升级规则
  7. 数显表和PLC中的数值不一致怎么办?
  8. 电子健康档案相关知识问答汇总
  9. 18.迭代器模式(行为型)
  10. matlab他励直流电动机机械特性、效率与损耗分析