数学建模之数据分析【八】:数据预处理之数据格式化
文章目录
- 一、在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 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)
经过格式化后