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

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

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

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

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

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

代码示例:

import pandas as pd

data = {'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 pd
 
data = {'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}'.format
 
formatted_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 pd
 
data = {'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 pd
  
df = 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 pd
 
date_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 pd

date_sr = pd.to_datetime(pd.Series("2020-12-08"))
change_format = date_sr.dt.strftime('%d/%m/%Y') #日/月/
 
print(change_format)

在这里插入图片描述

  • 示例三:
import pandas as pd

date_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 pd

df = 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 pd

player_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 pd

player_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)

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

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清上尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值