当前位置: 首页 > news >正文

数学建模之数据分析【八】:数据预处理之数据格式化

文章目录

  • 一、在Pandas中格式化数据框的浮点列
    • 1.1 将列值四舍五入到两位小数
    • 1.2 使用逗号和小数精度的 Pandas DataFrame 格式
    • 1.3 在 Pandas DataFrame 中格式化和缩放人口数据
  • 二、如何检查Pandas DataFrame 中的数据类型
    • 2.1 创建 DataFrame 检查 DataType
      • 2.1.1 创建数据集
      • 2.1.2 检查数据类型
    • 2.2 DataFrame.select_dtypes依照类型选择数据
  • 三、如何在Python中更改Pandas日期时间格式
    • 3.1 strftime()功能
    • 3.2 实用例子
  • 四、在Pandas数据框中将列类型从字符串转换为日期时间格式
    • 4.1 基本方法
    • 4.2 使用 pd.to_datetime() 函数将列转换为 DateTime
    • 4.3 使用 DataFrame.astype() 函数将列转换为 DateTime
    • 4.4 使用 pandas.to_datetime() 将列类型从 String 转换为 'yyyymmdd' 格式

获取更多数模资料,请关注
公众号:快乐数模
小红书:学数模使我快乐

数据预处理是任何数据分析或机器学习项目中的关键步骤。它涉及各种任务,目的是将原始数据转换为干净可用的格式。正确准备的数据确保更准确、可靠的分析结果,从而做出更好的决策和有效的预测模型。近期的数据预处理章节将涵盖数据准备的关键方面,包括数据格式化、数据清洗、数据转换和数据抽样。
本篇是数据预处理之数据格式化。

一、在Pandas中格式化数据框的浮点列

呈现数据时,按所需的格式显示数据是一个关键部分。有时,值是如此大,以至于我们只想显示其中部分(或按照我们意愿显示固定格式)。
下面是使用 Python 在 Pandas 中格式化数字的各种方法。

1.1 将列值四舍五入到两位小数

代码示例:

import pandas as pddata = {'Month': ['January', 'February', 'March', 'April'],'Expense': [21525220.653, 31125840.875, 23135428.768, 56245263.942]}dataframe = pd.DataFrame(data, columns=['Month', 'Expense'])print("Given Dataframe :\n", dataframe)pd.options.display.float_format = '{:.2f}'.format    #将数值设置为显示两位小数的字符串,不使用千位分隔符。print('\nResult :\n', dataframe)

结果显示
在这里插入图片描述

1.2 使用逗号和小数精度的 Pandas DataFrame 格式

下面的代码使用 pandas 创建一个 DataFrame,即“products_dataframe”,其中包含产品名称及其各自的价格。它打印初始 DataFrame,然后用逗号设置“Price”列的格式,并将值四舍五入到两位小数。

import pandas as pddata = {'Product': ['Laptop', 'Phone', 'Tablet', 'Desktop'],'Price': [1200.50, 799.99, 349.75, 1500.25]}products_dataframe = pd.DataFrame(data, columns=['Product', 'Price'])print("Given Dataframe :\n", products_dataframe)pd.options.display.float_format = '{:,.2f}'.formatformatted_products = products_dataframe.copy()
formatted_products['Price'] = formatted_products['Price'].apply(lambda x: '{:,.2f}'.format(x))  #将浮点数转换为带逗号的字符串,保留两位小数,使用千位分隔符。# Display the formatted DataFrame
print('\nResult :\n', formatted_products)

在这里插入图片描述

1.3 在 Pandas DataFrame 中格式化和缩放人口数据

代码利用 pandas 库创建一个名为“city_dataframe”的 DataFrame,其中包含城市名称及其各自的人口。最初显示 DataFrame,之后使用逗号设置填充列的格式,并将值缩放到数百万。

import pandas as pddata = {'City': ['New York', 'Los Angeles', 'Chicago', 'Houston'],'Population': [8336817, 3980400, 2716000, 2328000]}city_dataframe = pd.DataFrame(data, columns=['City', 'Population'])print("Given DataFrame:\n", city_dataframe)pd.options.display.float_format = '{:,.2f}'.format
city_dataframe['Population'] = city_dataframe['Population'] / 1000000 print('\nResult:\n', city_dataframe)

在这里插入图片描述

二、如何检查Pandas DataFrame 中的数据类型

Pandas DataFrame 是一种可变大小和异构表格数据的二维数据结构。Python 中提供了不同的内置数据类型。用于检查数据类型的两种方法是pandas.DataFrame.dtypes 和 pandas.DataFrame.select_dtypes.

2.1 创建 DataFrame 检查 DataType

创建一个购物商店的数据集,包含有关客户序列号、客户名称、所购商品的产品 ID、产品成本和购买日期的数据

2.1.1 创建数据集

#importing pandas as pd
import pandas as pddf = pd.DataFrame({
'Cust_No': [1,2,3],
'Cust_Name': ['Alex', 'Bob', 'Sophie'],
'Product_id': [12458,48484,11311],
'Product_cost': [65.25, 25.95, 100.99],
'Purchase_Date': [pd.Timestamp('20180917'),pd.Timestamp('20190910'),pd.Timestamp('20200610')]
}) 
df

在这里插入图片描述

2.1.2 检查数据类型

使用df.dtypes

  • 示例一:检查所有列的数据类型
df.dtypes

在这里插入图片描述

  • 示例二:检查特定列的数据类型
df.Cust_No.dtypes

在这里插入图片描述

  • 示例三:检查特定列的数据类型
df.Cust_No.dtypes

在这里插入图片描述

2.2 DataFrame.select_dtypes依照类型选择数据

与检查数据类型不同,用户可以选择执行检查以获取特定数据类型的数据(如果存在),否则将返回一个空数据集。此方法根据列 dtypes 返回 DataFrame 列的子集。

  • 示例一:返回 int64 的列
df.select_dtypes(include = 'int64')

在这里插入图片描述

  • 示例二:除 int64 外的列都选
df.select_dtypes(exclude = 'int64')

在这里插入图片描述

  • 示例三:打印无bool类型的列(空)
df.select_dtypes(include = "bool")

在这里插入图片描述

三、如何在Python中更改Pandas日期时间格式

日期时间默认格式为“YYYY-MM-DD”。因此,2020 年 12 月 8 日,日期格式将显示为“2020-12-08”。日期时间格式可以更改,通过更改,我们的意思是更改格式的顺序和样式。

3.1 strftime()功能

strftime() 可以更改 Python 中的日期格式。

strftime(format) 

其中,format 是一个字符串,表示所需的日期格式类型。

  • 年份 %y
  • 对于月份 %m
  • 对于第 %d 天
    方法:
  • 导入模块
  • 提供日期
  • 使用上述功能更改格式

3.2 实用例子

  • 示例一:
import pandas as pddate_sr = pd.Series(pd.date_range('2019-12-31', periods=3, freq='M', tz='Asia/Calcutta')) #生成三个月的日期,频率为M,时区为印度标准时间#设置索引
ind = ['Day 1', 'Day 2', 'Day 3']date_sr.index = ind  #将索引赋值给date_sr的索引
change_format = date_sr.dt.strftime('%d,%m,%Y') #格式化日月年print(change_format)

在这里插入图片描述

  • 示例二
import pandas as pddate_sr = pd.to_datetime(pd.Series("2020-12-08"))
change_format = date_sr.dt.strftime('%d/%m/%Y') #日/月/print(change_format)

在这里插入图片描述

  • 示例三:
import pandas as pddate_sr = pd.to_datetime(pd.Series("2012-09-02"))
change_format = date_sr.dt.strftime('%d-%m-%Y')print(change_format)

在这里插入图片描述

四、在Pandas数据框中将列类型从字符串转换为日期时间格式

Pandas 中处理数据时,遇到时间序列数据并不罕见,我们知道 Pandas 是处理 Python 中时间序列数据的非常有用的工具。
让我们看看如何将字符串的 DataFrame 列(dd/mm/yyyy 格式)转换为日期时间格式。如果日期的格式不正确,我们将无法对日期执行任何基于时间序列的操作。为了能够使用它,我们需要将日期转换为日期时间格式。

4.1 基本方法

将类型从字符串转换为日期时间格式的方法:

  • 使用 pd.to_datetime() 函数
  • 使用 DataFrame.astype() 函数
  • 使用 pandas.to_datetime()函数

4.2 使用 pd.to_datetime() 函数将列转换为 DateTime

利用 pandas 库创建一个名为 ‘df’ 的 DataFrame,其中包含 ‘Date’、‘Event’ 和 ‘Cost’ 列,然后打印 DataFrame 并使用该方法显示有关每列的数据类型和非 null 值的信息.

import pandas as pddf = pd.DataFrame({'Date':['11/8/2011', '04/23/2008', '10/2/2019'],'Event':['Music', 'Poetry', 'Theatre'],'Cost':[10000, 5000, 15000]})print(df)df.info()

在这里插入图片描述
下面进行转换:

df['Date']= pd.to_datetime(df['Date'])df.info()

在这里插入图片描述

4.3 使用 DataFrame.astype() 函数将列转换为 DateTime

使用 DataFrame.astype() 函数,创建一个 pandas DataFrame ‘df’,其中包含 ‘Date’、‘Event’ 和 ‘Cost’ 列,打印 DataFrame 并输出有关每列中数据类型和非 null 值的信息,特别关注使用该方法的 ‘Date’ 列 。

  • 示例一:
df['Date'] = df['Date'].astype('datetime64[ns]')df.info()

在这里插入图片描述

  • 示例二:

import pandas as pdplayer_list = [['200712',50000],['200714',51000],['200716',51500],['200719',53000],['200721',54000],['200724',55000],['200729',57000]]df = pd.DataFrame(player_list,columns=['Dates','Patients'])print(df)
print()print(df.dtypes) 

在这里插入图片描述
经过格式化后:

df['Dates'] = pd.to_datetime(df['Dates'], format='%y%m%d') print(df)
print()
print(df.dtypes) 

在这里插入图片描述

4.4 使用 pandas.to_datetime() 将列类型从 String 转换为 ‘yyyymmdd’ 格式

import pandas as pdplayer_list = [['20200712',50000,'20200812'],['20200714',51000,'20200814'],['20200716',51500,'20200816'],['20200719',53000,'20200819'],['20200721',54000,'20200821'],['20200724',55000,'20200824'],['20200729',57000,'20200824']]df = pd.DataFrame(player_list,columns = ['Treatment_start','No.of Patients','Treatment_end'])print(df)
print()
print(df.dtypes)

在这里插入图片描述
经过格式化后
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【傅里叶分析】复数基础知识
  • 搭建NFS服务器
  • 《黑神话悟空》:你绝对想知道的秘密
  • 编程达人Windows核心编程 第18章 演示如何使用堆
  • 无知是福-谈环境计算
  • 电机学习记录
  • 请说一下单例模式的概念及应用场景
  • DB-GPT开源项目文档入门
  • Python中的基本数据类型:构建坚实编程基石
  • centos7安装Kafka单节点环境部署一-ZooKeeper安装与配置
  • UE5-C++入门教程(二)---编写Editor类别的自定义模型实现小球规划路线的可视化
  • npm install报错,解决记录
  • 基于x86 平台opencv的图像采集和seetaface6的人脸朝向姿态估计功能
  • Spring OAuth2授权服务配置示例
  • 真题解析 | CCF CSP-J 2020 入门级 C++语言真题及答案
  • 【个人向】《HTTP图解》阅后小结
  • 07.Android之多媒体问题
  • android图片蒙层
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • 测试开发系类之接口自动化测试
  • 大主子表关联的性能优化方法
  • 深入浅出Node.js
  • 时间复杂度与空间复杂度分析
  • PostgreSQL之连接数修改
  • Python 之网络式编程
  • # 安徽锐锋科技IDMS系统简介
  • # 数论-逆元
  • #Ubuntu(修改root信息)
  • $(function(){})与(function($){....})(jQuery)的区别
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (26)4.7 字符函数和字符串函数
  • (52)只出现一次的数字III
  • (C语言)fgets与fputs函数详解
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (SpringBoot)第二章:Spring创建和使用
  • (二)丶RabbitMQ的六大核心
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)菜鸟学数据库(三)——存储过程
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net wcf memory gates checking failed
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .Net的DataSet直接与SQL2005交互
  • .net项目IIS、VS 附加进程调试