python学习——pandas统计分析基础

news2024/12/24 7:43:26

目录

  • pandas统计分析基础
  • 1. Series数据
  • 2.文件读取
    • csv文件
    • Excel文件
  • 3.DataFrame
    • 连接数据库
    • 读取数据库
    • 存入数据库
    • DataFrame的属性
    • 访问DataFrame中的数据
    • 【实例1】info详细信息和describe描述统计分析
    • 【实例2】 排序
    • 【实例3】 布尔索引,条件索引
    • 【案例】修改数据
  • 3.描述分析DataFrame
    • 【实例】获取最大值位置
    • 【实例】字符串分割,转换成列表,电影数据


pandas统计分析基础

# 设置显示的最大列、宽等参数,消掉打印不完全中间的省略号
# pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)#加了这一行那表格的一行就不会分段出现了
# pd.set_option('display.max_colwidth', 1000)
# pd.set_option('display.height', 1000)
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)

  1. Series 一维,带标签数组
  2. DataFrame 二维,Series容器

1. Series数据

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.文件读取

read_table已弃用,请改用read_csv

csv文件

CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的

order=pd.read_csv('F:\python\meal_order_info.csv',sep = ',',encoding = 'gbk')
#encoding为文件编码格式,UTF-8,UTF-16,GBK,GB2312,GB18030
order.to_csv('F:\python\meal_o.csv',sep = ';',index = False)

import pandas as pd
df=pd.read_csv("./dogNames2.csv")#同一目录下
print(df)

Excel文件

user = pd.read_excel('users.xlsx')## 读取user.xlsx文件
user.to_excel('F:\python\pd.xlsx')##存excel文件
import pandas as pd
userInfo = pd.read_excel('users.xlsx',sheet_name = 'users1')#文件路径直接为名字
print('客户信息表的长度为:',len(userInfo))

3.DataFrame

在这里插入图片描述

import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(12).reshape((3,4)),index=list("abc"),columns=list("wxyz"))
print(df)

连接数据库

SQL问题解决:
https://www.cnblogs.com/liuzengzhi/p/11704069.html
https://blog.csdn.net/rnzhiw/article/details/84307694
https://blog.csdn.net/weixin_30709809/article/details/95542057
SQL文件导入mysql中:
https://blog.csdn.net/weixin_37887248/article/details/80897230
show databases;
use testdb;
source F:/data/meal_order_detail3.sql
show tables;

数据库产品名+连接工具名://用户名:密码@数据库IP地址:数据库端口号/数据库名称?charset=数据库数据编码

from sqlalchemy import create_engine
## 创建一个mysql连接器,用户名为root,密码为1234
## 地址为127.0.0.1,数据库名称为testdb,编码为utf-8
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:\
3306/testdb?charset=utf8')
print(engine)

读取数据库

## 使用read_sql_query查看tesdb中的数据表数目
formlist = pd.read_sql_query('show tables', con = engine)
## 使用read_sql_table读取订单详情表
detail1 = pd.read_sql_table('meal_order_detail1',con = engine)
## 使用read_sql读取订单详情表
detail2 = pd.read_sql('select * from meal_order_detail2',con = engine)
detail3 = pd.read_sql('meal_order_detail3',con = engine)

存入数据库

## 使用to_sql存储orderData
detail1.to_sql('test1',con = engine,index = False,if_exists = 'replace')

DataFrame的属性

在这里插入图片描述

detail= pd.read_sql_table('meal_order_detail1',con = engine)
print(detail.index)   #订单详情表的索引
print(detail.values)  #订单详情表的所有值
print(detail.columns) #订单详情表的列名
print(detail.dtypes)  #订单详情表的数据类型'\n',
print(detail.size)    ## 查看元素个数
print(detail.ndim)    ## 查看DataFrame的维度数
print(detail.shape)   ## 查看DataFrame的形状
print(detail.T.shape) ##订单详情表转置

访问DataFrame中的数据

order_id = detail['order_id'] #访问一列数据
dishes_name5 = detail['dishes_name'][:5]#前5个元素
orderDish = detail[['order_id','dishes_name']][:5]#order_id和dishes_name前5个元素
order5 = detail[:][1:6] #1-6行元素
detail.head() #订单详情表中前五个元素
detail.tail() #订单详情表中后五个元素

【实例1】info详细信息和describe描述统计分析

import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(12).reshape((3,4)),index=list("abc"),columns=list("wxyz"))
print(df)
d1={"name":["xiaomin","xiaohong"],"age":[12,13],"tel":[100,120]}
d2=pd.DataFrame(d1)
print(d2.info(2))
print(df.describe())

【实例2】 排序

import pandas as pd
df=pd.read_csv("./dogNames2.csv")
print(df.head())
print(df.info())
#dataFrame中排序的方法
df=df.sort_values(by="Count_AnimalName",ascending=False)
print(df.head(10))

df.loc 通过标签索引行数据
df.iloc 通过位置获取行数据
在这里插入图片描述
在这里插入图片描述
赋值更改数据的过程:

在这里插入图片描述

【实例3】 布尔索引,条件索引

import pandas as pd
df=pd.read_csv("./dogNames2.csv")
#dataFrame中排序的方法
df=df.sort_values(by="Count_AnimalName",ascending=False)
#次数超过800的狗的名字
a=df[df["Count_AnimalName"]>800]
#使用次数超过700并且名字的字符串的长度大于4的狗
b=df[(df["Row_Labels"].str.len()>4)&(df["Count_AnimalName"]>700)]

在这里插入图片描述
在这里插入图片描述
【其他】字符串常用方法,切片
在这里插入图片描述

#单列切片
dishes_name1 = detail.loc[:,'dishes_name']
dishes_name2 = detail.iloc[:,3]
#多列切片
orderDish1 = detail.loc[:,['order_id','dishes_name']]
orderDish2 = detail.iloc[:,[1,3]]
#花式切片
#列名为order_id和dishes_name的行名为3的数据
print(detail.loc[3,['order_id','dishes_name']])
#列名为order_id和dishes_name行名为2,3,4,5,6的数据
print(detail.loc[2:6,['order_id','dishes_name']])
#列位置为1和3行位置为3的数据
print(detail.iloc[3,[1,3]])
#列位置为1和3行位置为2,3,4,5,6的数据
print(detail.iloc[2:6,[1,3]])
#条件切片
#detail中order_id为458的dishes_name
print(detail.loc[detail['order_id']=='458',['order_id','dishes_name']])
#detail中order_id为458的第1,5列数据为
print(detail.iloc[(detail['order_id']=='458').values,[1,5]])

【案例】修改数据

#修改
##将order_id为458的,变换为45800
detail.loc[detail['order_id']=='458','order_id'] = '45800'
#增加
detail['payment'] =  detail['counts']*detail['amounts'] #增加非定值
detail['pay_way'] = '现金支付' #增加定值
#删除
detail.drop(labels = 'pay_way',axis = 1,inplace = True)   #删除列
detail.drop(labels = range(1,11),axis = 0,inplace = True) #删除行

3.描述分析DataFrame

在这里插入图片描述
在这里插入图片描述

【实例】获取最大值位置

import pandas as pd
df=pd.read_csv("./IMDB-Movie-Data.csv")
print(df.info())
b=df["Rating"].argmax()
#获取最大值的位置
print(b)

【实例】字符串分割,转换成列表,电影数据

按照字符串类型“/”分隔,并转换成列表
在这里插入图片描述

import pandas as pd
df=pd.read_csv("./IMDB-Movie-Data.csv")
print(df.info())
b=df["Rating"]
#获取平均分
rating_mean=b.mean()
#获取导演人数,字符串的处理
diector_num=len(df["Director"].unique())
diector_num2=len(set(df["Director"].tolist()))
#获取演员人数
temp_actor_list=df["Actors"].str.split(",").tolist()
#列表里的数据转换到一个数据里
actor_list1=[i for j in temp_actor_list for i in j ]
print(len(set(actor_list1)))
print(diector_num)

np.mean(detail['amounts']) #np求均值
detail['amounts'].mean()   #pd求均值
detail[['counts','amounts']].describe()#描述性统计非空值数均值四分位数标准差
detail['dishes_name'].value_counts()[0:10] #频数统计结果前10
#单信息表dishes_name列转变数据类型为category类型
detail['dishes_name'] = detail['dishes_name'].astype('category')
#category类型描述统计结果,非空值数、类别数目、数目最多的类别、数目最多的类别数目
detail['dishes_name'].describe()

对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?
思路:
重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1

在这里插入图片描述

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
file_path = "./IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)
print(df["Genre"].head(3))
#统计分类的列表
temp_list = df["Genre"].str.split(",").tolist()  #[[],[],[]]

genre_list = list(set([i for j in temp_list for i in j]))

#构造全为0的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)
# print(zeros_df)

#给每个电影出现分类的位置赋值1
for i in range(df.shape[0]):
    #zeros_df.loc[0,["Sci-fi","Mucical"]] = 1
    zeros_df.loc[i,temp_list[i]] = 1

# print(zeros_df.head(3))

#统计每个分类的电影的数量和
genre_count = zeros_df.sum(axis=0)
print(genre_count)

#排序
genre_count = genre_count.sort_values()
_x = genre_count.index
_y = genre_count.values
#画图
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x)),_y,width=0.4,color="orange")
plt.xticks(range(len(_x)),_x)
plt.show()

在这里插入图片描述

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

# 设置显示的最大列、宽等参数,消掉打印不完全中间的省略号
# pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)#加了这一行那表格的一行就不会分段出现了
# pd.set_option('display.max_colwidth', 1000)
# pd.set_option('display.height', 1000)
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)

df=pd.read_csv("./IMDB-Movie-Data.csv")

#统计分类的列表
temp_list=df["Genre"].str.split(",").tolist()
gener_list=list(set([i for j in temp_list for i in j ]))

a=pd.DataFrame(np.zeros((len(df["Genre"]),len(gener_list))),columns=gener_list)

for i in range(len(df["Genre"])):
    a.loc[i,temp_list[i]]=1

genre_sum=a.sum(axis=0)
df=genre_sum.sort_values()
print(df)
a_=df.index
b_=df.values

plt.figure(figsize=(20,8),dpi=80)#设置窗口大小
plt.bar(a_,b_,color="red")
plt.xticks(a_,rotation=0)
plt.grid(alpha=0.3)
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/673274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LIBSVM与LIBLINEAR支持向量机库对模式识别与回归的可视化代码实践

支持向量机(SVM)是一种流行的分类技术。虽然提出时间到现在有70来年了,但在90年代获得了很好的发展和扩展,在人像识别、文本分类、手写字符识别、生物信息学等模式识别问题中有得到应用。然而,对于不熟悉SVM的初学者来说,往往会因…

ThreadPoolExecutor解读

目录 线程池状态 构造方法 newFixedThreadPool newCachedThreadPool newSingleThreadExecutor 提交任务 关闭线程池 其它方法 线程池状态 ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量 状态名 高 3 位 接收新任务 处理…

JavaScript ES10新特性

文章目录 导文Array.prototype.flat()和Array.prototype.flatMap()Object.fromEntries()String.prototype.trimStart()和String.prototype.trimEnd()格式化数字动态导入可选的catch绑定BigIntglobalThis 导文 JavaScript ES10,也被称为ES2019,引入了一些…

javascript被禁用怎么办?怎么启用?||如何解决javascript:void(0)的问题?

javascript被禁用怎么办?怎么启用? 有些小伙伴可能因为浏览器弹窗的凌乱而感到烦恼,想要通过浏览器禁用JavaScript的方式来避免这些广告。有些小伙伴则是因为设置了不知名的设置导致JavaScript被禁用,影响日常的使用。接下来的这…

Vue3的计算属性和监听属性

目录 computed 语法介绍 简写版 完整版 watch 介绍 监听ref式数据代码示例 监听reactive式数据 watchEffect函数 computed 语法介绍 与Vue2.x中computed配置功能一致 import {computed} from vuesetup(){...//计算属性——简写let fullName computed(()>{return per…

【kubernetes】部署kubelet与kube-proxy

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

ffmpeg调整音频音量踩坑

前一阵用Flutter结合ffmpeg做了一个音视频合并功能,记录一下遇到的问题。 合并方法 首先是音视频合并命令: ffmpeg -i input.mp4 -i input.mp3 -filter_complex "[1:a]adelay0s:all1[a1];[a1]amixinputs1[amixout]" -map 0:v:0 -map "…

Ts系列之条件类型

Ts系列之条件类型 Ts系列之条件类型前言一、初遇二、条件判断三、待补充 Ts系列之条件类型 前言 本片文章主要对ts条件类型的用法做一个讲解。 一、初遇 1、首先我们来看看一个小例子: interface Person {name: string;age: number; } interface Son extends P…

神经网络:梯度计算

在计算机视觉中,梯度计算是一项关键任务,它在优化算法中扮演着重要的角色。梯度表示函数在某一点上的变化率,可以指导模型参数的更新,使得模型逐步接近最优解。下面我将详细解释梯度计算的作用、原理和意义。 作用: 梯…

C++ 新的类型转换

文章目录 前言一、静态转换(static_cast)二、动态转换(dynamic_cast):三、常量转换(const_cast):四、重新解释转换(reinterpret_cast):总结 前言 …

基于Java+Swing实现记事本-完美版

基于JavaSwing实现记事本-完美版 一、系统介绍二、功能展示1.主页2.文件功能3.编辑功能4.格式--功能5.查看功能 三、系统实现1. Fontv.java 四、其它1.其他系统实现2.获取源码 一、系统介绍 1.主页 2.文件功能 3.编辑功能 4.格式–功能 5.查看功能 二、功能展示 1.主页 2.文…

一文带你弄清Map集合及其实现类(适合小白秋招篇)

前言: 本篇文章主要讲解Java中的Map集合接口以及相关实现类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以…

【Linux】冯诺依曼体系结构 操作系统 进程概念

目录 一、冯诺依曼体系结构 二、操作系统 1、概念 2、设计OS的目的 三、进程 1、基本概念 2、描述进程-PCB 3、组织进程 4、查看进程和终止 5、通过系统调用获取进程标识符 6、通过系统调用创建进程-fork 7、进程状态 8、特殊进程 8.1 僵尸进程 8.2 孤儿进程 一、冯诺依曼体…

【从零开始学习JAVA | 第八篇】String类

目录 前言: String类: 常见的认识误区: 创建String类: 注意点: 总结: 前言: String类是Java中最常见的一个类,本篇将对Stirng类的各种功能进行详细的介绍,各位小伙伴…

js:使用vue-codemirror实现一个语法高亮的网页代码编辑器

codemirror code editor component for vuejs 译文:vuejs的codemirror代码编辑器组件 文档 https://github.com/surmon-china/vue-codemirror 安装 # 依赖 pnpm install codemirror vue-codemirror --save# 语言 pnpm install codemirror/lang-json --save pnpm …

【VulnHub系列】MyFileServer

因为是从PDF转换过来偶尔可能会出现内容缺少,可以看原版PDF:有道云笔记 实验环境 Kali:192.168.10.102 MyFileServer:192.168.10.106 实验过程 通过arp-scan来发现靶机的IP地址 sudo arp-scan --interface eth0 192.168.10.1…

mediapipe 谷歌高效ML框架-图像识别、人脸检测、关键点检测

参考: https://github.com/google/mediapipe https://developers.google.com/mediapipe/solutions/guide 框架也支持cv、nlp、audio等项目,速度很快: 1、图形识别 参考:https://developers.google.com/mediapipe/solutions/vi…

【从零开始学习JAVA | 第九篇】字符串综合练习

前言: 在前一篇我们学习了String类以及两个接口函数,今天我们将利用昨天的知识以及讲解新的方法进行几个实战操作,以此来巩固我们的所学内容。 1.实现用户登录,对用户输入的密码进行验证 需求:已知正确的用户名和密码…

31 linux 中 用户栈帧 -> 内核栈帧

前言 比如 我们之前调试的 glibc 相关的库函数 glibc 相关是属于用户程序, 调用 操作系统的系统调用的时候, 会是 怎么样的一个情况呢? 系统调用 会有对应的系统栈帧来处理 系统调用的相关函数调用的堆栈支持 测试用例 我们这里主要是以 printf 中会分配缓冲区调用 ma…

NVIDIA Thrust教程

NVIDIA Thrust教程 Thrust 的 API 参考指南,CUDA C 模板库。 1.简介 Thrust 是基于标准模板库 (STL) 的 CUDA 的 C 模板库。 Thrust 允许您通过与 CUDA C 完全互操作的高级接口,以最少的编程工作实现高性能并行应用程序。 Thrust 提供了丰富的数据并…