Pandas python dataframe 时间格式转换
在本文中,我们将介绍如何使用Pandas处理不同格式的日期时间数据,特别是在将多个不同格式的日期和时间列合并为一个单独的datetime格式列时。
阅读更多:Pandas 教程
背景和问题
在数据分析和预处理中,日期和时间数据是非常常见的。但是,在现实生活中,时间是以多种形式表达的。例如,常见的时间格式有以下几种:
- ‘%m/%d/%Y’:月/日/年(例如: ’08/17/2021’)
- ‘%Y-%m-%d’:年-月-日(例如:’2021-08-17’)
- ‘%m/%d/%Y %H:%M:%S’:月/日/年 时:分:秒(例如:’08/17/2021 15:45:30’)
- ‘%Y-%m-%d %H:%M:%S’:年-月-日 时:分:秒(例如:’2021-08-17 15:45:30’)
因此,在处理数据时,可能会遇到如下问题:
- 数据集中有多个不同格式的时间列;
- 时间列的格式不是完全相同的。
那么,如何在Pandas中处理这些列呢?
解决方案
加载数据
首先,我们需要准备一个示例,包含两个不同格式的日期时间数据列。我们将使用一个包含订单日期和交付日期的数据集。让我们来看看这个数据集。
import pandas as pd
orders = pd.DataFrame({
'order_date': ['02/12/2021', '2020-05-27', '06/30/2021', '2019/04/23'],
'delivery_date': ['2021-02-13', '2020-06-02 10:30:00', '07/03/2021 15:42:27', '2019-04-26 11:24:35']
})
上述代码将创建一个具有两列的数据帧。这些列包含日期时间数据,其中一列以’%m/%d/%Y’格式,另一列以’%Y-%m-%d %H:%M:%S’格式表示。
转换日期时间格式
使用 Pandas,可以轻松地将不同格式的日期时间数据转换为 ‘datetime’ 格式。我们只需要使用 ‘to_datetime()’ 函数,并将标签指定为它们的所需日期时间格式。
如下所示:
orders['order_date'] = pd.to_datetime(orders['order_date'], format='%m/%d/%Y')
orders['delivery_date'] = pd.to_datetime(orders['delivery_date'], format='%Y-%m-%d %H:%M:%S')
第一行代码将 ‘order_date’列转换为’%m/%d/%Y’日期时间格式,第二行将’delivery_date’列转换为’%Y-%m-%d %H:%M:%S’格式。此时,这两列的数据类型已经由 ‘object’ 转换为 ‘datetime64’。
合并日期和时间列
现在,我们已经根据指定格式,将两列转换为日期时间格式。接下来,我们将考虑如何将两列合并成一个单独的datetime列。
在这里,我们可以使用 Pandas 的 ‘combine()’ 函数。该函数用于将两个日期和时间对象组合成一个 datetime 对象。它可以灵活地处理日期和时间格式。
例如,我们可以使用以下代码来将日期和时间列合并到一个列中:
orders['delivery_datetime'] = pd.to_datetime(orders['delivery_date'].dt.date.astype(str) + ' ' + orders['delivery_date'].dt.time.astype(str))
在上面的代码中,我们首先使用 ‘dt.date’ 属性提取日期部分,再使用 ‘ dt.time’属性提取时间部分。然后将时间和日期合并起来,形成一个新的datetime对象,并将其存储到一个新的列’delivery_datetime’中。
更改列的名称和删除不需要的列
最后,我们可以删除原始的日期和时间列,只保留新的datetime列。
orders.drop(['order_date', 'delivery_date'], axis=1, inplace=True)
这样,我们就完成了多个日期时间列的转换和合并。现在,我们已经将两个不同的日期时间列转换成了一个新的datetime格式列。
总结
在本文中,我们介绍了如何使用Pandas处理多个日期时间列,特别是在将多个不同格式的日期和时间列合并为一个单独的datetime格式列时。我们使用了Pandas的 ‘to_datetime()’函数和’ combine()’函数,将不同格式的日期和时间转换为datetime格式,然后将它们合并成一个日期和时间列。
此外,我们还学习了如何删除不需要的列,只保留新的列。
希望这篇文章能够帮助你更好地处理和分析日期时间数据。