python-数据分析-缺失值-函数-数据类型

1 常用排序和统计函数

1 排序

sort_values()

# by 指定排序的字段  可以传入列表,做多字段排序, 比如下面的例子, 当价格相同的时候, 价格相同的数据再按面积排序
# ascending 也可以传入列表,长度更by 的列表相同, 多字段排序的时候, 每个字段是升序还是降序排可以手动指定
df.sort_values(by=['价格','面积'],ascending=False)

nlargest()

nsmallest()

df.nlargest(5,columns=['价格'])  # 价格 n个最大的
df.nsmallest(5,columns=['价格'])  # n个最小的

2 统计函数

df.corr() 计算相关性, 判断两列数据是否同增同减

  • 如果两列变量 一个增加, 另外一个也增加, 一个减少另外一个也减少, 说明他们之间具备正相关性 , 计算出来的相关系数>0 相关系数>0.7 强相关 0.3~0.7 之间 具有相关性 <0.3 相关性比较弱

  • 如果两列变量 一个增加, 另外一个减少, 一个减少另外一个增加, 说明他们之间具备负相关性

相关性的应用场景

  • 用来判断不同数据之间是否有关联, 如果两列数据相关性比较强, 说明他们之间可能具有因果关系

  • 在数据分析过程中, 归因分析是比较重要的, 做归因可以从计算相关性开始进行分析

  • 相关不等于因果

df.min() 最小 df.max() 最大 df.mean() 平均 df.std() 标准差 df.sum() 求和

  • 计算这些统计量的时候, 如果df中又多列数值型的数据, 既可以按行计算, 也可以按列计算, 通过传入0,1来进行控制

2 缺失值处理

2.1 认识缺失值, Pandas如何表示缺失值

from numpy import NaN,NAN,nan

Nan 是一个特殊的float类型的数据, 它和任何值都不相等

2.2 加载数据后, 如何判断缺失值数量

pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/city_day.csv',keep_default_na=True,na_values='Ahmedabad')
# keep_default_na 默认是True 数据中有空值会加载成NaN  如果改成False 空值就是空白内容  
# na_values='Ahmedabad' 可以指定 哪些值可以作为缺失值处理

如果没有特殊需求, 正常加载数据, 缺失会被加载成NAN

df.isnull() # 是空值 返回True 不是返回False
df.notnull()  # 不是空值 返回True 是返回False

计算每一列缺失值的数量

df.isnull().sum()

2.3 缺失值的处理

删除缺失值
  • 使用dropna函数来删除空值,具体用法如下

    # 函数用法
    df.dropna(    axis=0,     how='any',     inplace=True,     subset=['列名',...],    thresh=10
    )
    ​
    df.drop() # 按列删除
  • dropna函数参数解释

    • axis=0

      • 可选参数 ,默认为0按行删

      • 0, or 'index':删除包含缺失值的行

      • 1, or 'columns':删除包含缺失值的列

    • how='any'

      • 可选参数,默认为any

      • any: 如果存在NA值,则删除该行或列

      • all: 如果所有值都是NA,则删除该行或列

    • inplace=False

      • 可选参数,不建议使用这个参数

      • 默认False, 不对原数据集进行修改

      • inplce=True,对原数据集进行修改

    • subset接收一个列表

      • 接收一个列表,列表中的元素为列名: 对特定的列进行缺失值删除处理

    • thresh=n

      • 可选参数

      • 参数值为int类型,按行去除NaN值,去除NaN值后该行剩余数值的数量(列数)大于等于n,便保留这一行

缺失值填充

非时序数据

  • 考虑用默认值填充

  • 使用统计量进行填充 均值, 中位数,众数

pm25_mean = df2['PM2.5'].mean()
df2['PM2.5'].fillna(pm25_mean)

时序数据

  • 天气数据,股票的数据

  • 跟时间相关, 前一个数据和后一个数据有一定关系

时序数据填充可以考虑用前一个非空值, 后一个非空值填充,可以使用线性插值

s1 = df['Xylene'][54:64]
​
s1.fillna(method='ffill')
​
s1.fillna(method='bfill')
​
s1.interpolate()

3 数据类型转换

3.1 数值型和字符串之间的转换

astype()

pd.to_numeric()

import pandas as pd
df = pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/city_day.csv')
df['PM2.5'] = df['PM2.5'].astype(object)
df2 = df.head().copy()
# 创造包含'missing'为缺失值的数据,批量替换第1、3、5行中NO列的值为字符串'missing'
df2.loc[::2, 'NO'] = 'missing'
df2.info()
df2['NO'].astype(float)

ValueError: could not convert string to float: 'missing'

如果一列数据中, 有数值类型,也有字符串, astype转换为数值会报错,此时可以使用to_numeric()方法, 可以把字符串转换成空值

pd.to_numeric(df2['NO'],errors='coerce')

3.2 日期时间类型

datetime64 [ns]

  • 日期事件类型的列, 加载之后, 可以转换成日期事件类型, 就是datetime64[ns]

pd.to_datetime()
  • 也可以在加载的时候直接指定日期列, 直接加载成日期时间类型

pd.read_csv('',parse_dates = [日期列名])

Timestamp 时间戳

  • pd.to_datetime('时间点')

timedelta64 时间差值

两个时间相减

使用的时候需要注意, 如果一列数据 Series 是datetime64 、 timedelta64 的时候, 获取时间维度的相关属性需要通过

s.dt.XXX 来获取

print(df['Date'].dt.year) # 获取年
print(df['Date'].dt.month) # 月
print(df['Date'].dt.day) # 日
df['Date'].dt.quarter # 季度
s_time_delta = df['Date']-df['Date'].min()
s_time_delta.dt.days

datetime类型和timedelta类型都可以作为索引

  • 好处, 方便按照时间维度筛选数据

  • 方便按照时间维度进行切片操作

# Data 是日期时间类型列,  set_index 设置成行索引
df.set_index('Date', inplace=True)
# 在切片、按时间维度筛选数据之前, 先对日期时间索引排序
df = df.sort_index() # 对索引进行排序
df.loc['2018']
df.loc['2018-01-01']
df.loc['2018-02-01 22':'2018-02-02 23:59:59']

DatetimeIndex 类型 日期时间索引

计算两列日期数据的差值, 得到timedelta类型的Series可以把它设置为index 索引, 得到的是 TimedeltaIndex

df2 = df.query('City == "Delhi"')
df2.index = df2['Date']-df2['Date'].min()
df2.index
df2['3 days':'4 days']

4 分组聚合

df.grouppy([分组字段], as_index= )['聚合字段'].聚合方法()

df.grouppy([分组字段], as_index= )['聚合字段'].agg(['聚合方法名'])

df.grouppy([分组字段], as_index= ).agg({‘聚合字段名’:'聚合方法名','聚合字段名’:'聚合方法名'})

  • 分组字段,可以有1个多个, 默认分组的字段在分组的结果中会作为行索引, 如果设置了as_index = False ,分组字段会作为结果的列数据, 会使用从0开始的整数索引

  • 聚合字段可以有1个多个, 可以通过agg来指定不同的字段, 使用不同的聚合方式

  • 多个字段分组, 多个字段聚合, 得到的结果 MultiIndex 通过MultiIndex 做数据筛选, 传入的是元组

import pandas as pd
df = pd.read_csv('C:/Develop/顺义48/day01/02_代码/data/LJdata.csv')
#%%
df.groupby(['区域']).mean()
# FutureWarning 未来版本变化的提示, python 包版本升级之后, 可能一些方法, 或参数直接就变了, 或者删掉了
# 看到提示之后, 需要注意, 当前这份代码, pandas的版本不要升级
# python项目开发好之后, 开发时候用到的软件包, 不要升级
​
​
print(df.groupby('区域')['价格'].mean())
print(df.groupby('区域')[['价格']].mean())
df.groupby('区域')[['价格','面积']].mean()
print(df.groupby('区域')[['价格','面积']].agg(['mean','max']))
df_result= df.groupby('区域')[['价格','面积']].agg(['mean','max'])
df_result.columns
# MultiIndex([('价格', 'mean'),
#             ('价格',  'max'),
#             ('面积', 'mean'),
#             ('面积',  'max')],
#            )
​
print(df_result[[('价格', 'mean'),('价格',  'max')]])
​
df.groupby('区域').agg({'价格':'mean','面积':'max'})
​
df_result2 = df.groupby(['区域','户型']).agg({'价格':'mean','面积':'max'})
​
df_result2.index # 查看索引 当前对两个字段进行分组, 得到的是MultiIndex
​
df_result2.reset_index() # 重置索引
​
df.groupby(['区域','户型'],as_index=False).agg({'价格':'mean','面积':'max'})

DataFrameGroupby对象 (了解)

df.groupby('区域')['价格'].mean()

  • df.groupby('区域') → 对象 DataFrameGroupby

  • df_gb = df.groupby('区域')
    df_gb.groups # 可以获取所有的分组 {'区域取值':[当前取值在数据中的行索引]}
    df_gb.get_group('区域取值') → 这一组对应的DataFrame数据
  • df.groupby('区域')['价格'] → 对象 SeriesGroupby

自定义聚合函数

  • df.groupby('分组字段')['聚合字段'].agg(自定义聚合函数对象)

## 自定义聚合函数
def my_mean(x):print(x)print('=====')return x.sum()/len(x)
df.groupby('区域')['价格'].agg(my_mean)

5 数据分组(分箱) pd.cut

使用场景:

  • 把年龄划分成少年, 青年, 中年, 老年

  • 收入划分成, 低收入, 中收入, 高收入 。。

  • 价格 便宜, 中等, 贵

# 等距 每一组 边界差距, 尽量均匀
pd.cut(df['价格'],bins = 3) # bins 传入要分几组
# 可以自定义分组的边界
pd.cut(df['价格'],bins = [0,3000,8500,210000],labels=['便宜','中等','贵'])
# bins 默认区间是左开右闭合 (0,3000]  (3000,8500], (8500,210000] 需要注意最小的区间要比数据中的最小值小一些
# labels 可以指定分组之后, 每一组的名字,如果不指定默认使用的就是分组的边界的取值

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

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

相关文章

[笔试训练](三十四)100:[NOIP2008]ISBN号码101:kotori和迷宫102:矩阵最长递增路径

目录 100:[NOIP2008]ISBN号码 101:kotori和迷宫 102:矩阵最长递增路径 100:[NOIP2008]ISBN号码 题目链接:[NOIP2008]ISBN号码_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解: 简单模拟 #include <iostream> #include<string> using namespace std; str…

大数据技术Hbase列数据库——topic2

目录 启动Hadoop启动HbaseHbase常用Shell命令基本命令关于表的操作增删改查询 启动Hadoop 1.到Hadoop安装目录下输入命令 sbin/start-all.sh[rootlocalhost hadoop-2.7.1]# sbin/start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starti…

Maven导入jar包到本地仓库

导入本地jar包 <dependency><groupId>com.xxl</groupId>-----------------(参数二)<artifactId>xxl-sso-client</artifactId>-----------(参数三)<version>1.1.2</version>-----------------------(参数四) </dependency>用m…

5-Django项目--分页与搜索(资产页面)

目录 views/asset_data.py asset_data/asset_data.html 搜索与分页笔记: 搜索 整数搜索 字符串搜索 分页 views/asset_data.py # -*- coding:utf-8 -*- from django.shortcuts import render, redirect, HttpResponse from django.utils.safestring import mark_safe f…

MySQL查询数据库响应时长的方法

要查询MySQL数据库的响应时长&#xff0c;通常我们需要测量查询执行的时间。MySQL本身并不直接提供一个查询来显示每个查询的响应时长历史记录&#xff0c;但我们可以使用MySQL的内置函数和工具来测量和记录查询的执行时间。 以下是一些方法&#xff0c;我们可以用来测量MySQL…

电子元器件采购商城的售后服务保障

电子元器件采购商城的售后服务保障是用户在采购电子元器件时的重要考量因素之一。以下是常见的售后服务保障内容&#xff1a; 退换货政策&#xff1a; 质量问题退换货&#xff1a;如果用户收到的元器件存在质量问题&#xff0c;通常可以在一定时间内申请退换货。无理由退换货&a…

Laravel PHP 给富文本内容的图片设置最大宽度(自适应)

Laravel & PHP $data->富文本字段 preg_replace(/<img\s([^>])>/i, <img $1 style"max-width: 100%;">, $data->富文本字段); Js解决 小程序富文本图片宽度自适应-CSDN博客

数据分析第一天(pandas简单的对快餐店数据进行操作获得想要的信息,使用apply,groupby)

前言 数据保存在 https://github.com/harkbox/DataAnalyseStudy 数据名称&#xff1a;快餐数据.tsv &#xff08;tsv是用\t作为字符分隔符的文件格式&#xff1b;csv是逗号&#xff09; 因此可以用pandas的read_csv函数读取数据 1.读取数据 import pandas as pd import matp…

Kotlin 内联值类(@JvmInline value class)

文章目录 定义相等判定 我并不知道它的名字是不是这样翻译&#xff0c;以前是叫内联类&#xff08;inline class&#xff09;&#xff0c;我感觉现在这样叫有点拗口&#xff0c;或者是“值内联类”&#xff1f;如果有错误&#xff0c;麻烦您花点时间告诉我一声&#xff0c;十分…

Hutool工具网络文件下载与文件压缩

1.下载文件 HttpUtil.downloadFile(url,dest) url 为网络文件路径 dest 为下载后文件 2.文件压缩 ZipUtil.zip(srcPath,zip path)

PCA算法

PCA算法 原创 小王搬运工 时序课堂 2024-06-06 19:16 四川 1. PCA算法 PCA算法称为主成分分析&#xff0c;是一种无监督学习算法&#xff0c;主要用于数据降维和特征提取。 PCA是一种数据降维模型&#xff0c;它的基本模型是通过线性变换将数据转换到新的空间&#xff0c;这…

聚焦热点-浙江省“十五五”规划重大前期研究选聘课题(学习借鉴)

聚焦热点-浙江省“十五五”规划重大前期研究选聘课题&#xff08;学习借鉴&#xff09; 浙江省在经济发展、规划编制等各个方面走在全国前列&#xff0c;全国各地应学习借鉴。下面就浙江省发展和改革委员会关于“十五五”规划重大前期研究课题选聘内容梳理如下&#xff1a; 四…

windows架设NTP时间服务器进行时间同步

一、windows架设NTP时间服务器 1.win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_LOCAL_MACHINE\SYSTEM\Current…

【养老政策问答】银发经济你怎么看?

概述 养老政策问答是一个专门为老年人设计的一站式问答服务平台。该应用旨在为用户提供关于养老政策的全面信息和专业解答&#xff0c;帮助老年人理解和获取相关政策的详细内容&#xff0c;享受无忧的老年生活。用户可以通过此应用获取关于基本养老保险、养老保险的缴费与领取…

第二十六章CSS3续~

3.CSS3渐变属性 CSS3渐变(gradients)可以在两个或多个指定的颜色之间显示平稳的过渡。 以前&#xff0c;我们必须使用图像来实现这些效果。但是&#xff0c;通过使用CSS3渐变(gradients)&#xff0c;可以减少下载的事件和宽带的使用。由于渐变(gradient)是由浏览器生成的&…

YOLOv3深入解析与实战:实时目标检测的高效多尺度架构网络

参考&#xff1a; https://arxiv.org/pdf/1804.02767.pdf https://blog.csdn.net/weixin_43334693/article/details/129143961 网上有很多关于yolo的文章&#xff0c;有些东西没讲清楚&#xff0c;基于自己对论文的理解&#xff0c;也做一个按照自己的想法做的理解。 1. 预测…

神经网络 torch.nn---损失函数与反向传播

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation Loss Function的作用 每次训练神经网络的时候都会有一个目标&#xff0c;也会有一个输出。目标和输出之间的误差&#xff0c;就是用Loss Function来衡量的。所以&#xff0c;…

Qt图像处理技术十一:得到QImage图像的马赛克图像

效果图 指数5 指数15 指数40 原理 马赛克的原理很简单&#xff0c;就是取一个值&#xff0c;让这个值作为一个方格子的长宽&#xff0c;如40*40px的格子&#xff0c;取这个区域的平均R G B值&#xff0c;然后这个区域的所有像素点都是这个RGB值即可 源码 QImage applyM…

js平滑滚动元素使其可见

直接上重点&#xff1a; let xpath "//*/div[idxxx]"; document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView({ behavior: "smooth"})这段代码是JavaScript中使用XPath查询文档并执行平…

力扣2968.执行操作使频率分数最大

力扣2968.执行操作使频率分数最大 方法一&#xff1a;滑窗 前缀和 求前缀和数组s 求一个数组补齐到中位数的差值 枚举右端点 class Solution {public:int maxFrequencyScore(vector<int>& nums, long long k) {int res0,n nums.size();sort(nums.begin(),nums…