Pandas DateTime:何时以及如何使用它
作者:社区 / 开发者
2023 年 12 月 06 日
导航至
作为一名 Python 开发者,您通常会处理 DateTime 值,尤其是在处理与数据相关的操作时。使用 DateTime 数据在分析或操作大量数据时非常有用。Pandas 是当今 Python 开发者为此目的使用的最流行和最常用的库之一。
使用 Pandas,我们可以利用它提供的 DateTime 数据类型轻松处理与日期时间相关的数据并执行某些操作。在这篇博文中,我们将深入探讨 Pandas DateTime 的世界,探索它是什么、它的工作原理以及您可以使用的各种方式。
什么是 Pandas DateTime?
Pandas DateTime 是 Pandas 库提供的一种数据类型,用于高效处理日期和时间数据。它允许您对 DateTime 值执行各种操作,例如将字符串解析为 DateTime 对象、将 DateTime 对象格式化为字符串以及对 DateTime 数据执行算术运算。
让我们通过一个简单的示例快速了解 Pandas DateTime 对象的语法。
Pandas DateTime 语法
要创建 Pandas DateTime 对象,您通常使用 pd.to_datetime() 函数
import pandas as pd
datetime_obj = pd.to_datetime('2023-09-16 15:30:00')
如果您打印上面代码中的 datetime_obj,您应该得到以下输出
2023-09-16 15:30:00
一旦您有了 DateTime 对象,您就可以使用它执行各种操作,例如过滤、分组和绘制时间序列数据。
Pandas DateTime 示例
让我们从一个简单的示例开始,了解 Pandas DateTime 的工作原理。假设有一个数据集,其中有一列包含日期和时间信息。您可以首先创建一个 DataFrame,然后将一列转换为 DateTime。然后,您可以提取 DateTime 的各种组成部分。
import pandas as pd
# Sample data
data = {'timestamp': ['2023-09-16 08:00:00', '2023-09-16 09:30:00', '2023-09-16 11:15:00']}
df = pd.DataFrame(data)
# Convert the 'timestamp' column to DateTime
df['timestamp'] = pd.to_datetime(df['timestamp'])
# Extract various components of DateTime
df['year'] = df['timestamp'].dt.year
df['month'] = df['timestamp'].dt.month
df['day'] = df['timestamp'].dt.day
df['hour'] = df['timestamp'].dt.hour
df['minute'] = df['timestamp'].dt.minute
print(df)
在上面的代码中,我们显示了带有原始“timestamp”列的 DataFrame。我们还从每个时间戳中提取了年、月、日、小时和分钟,并将它们显示为单独的列。这不仅更容易查看、理解和理解数据,而且也更容易将这些单独的列用于进一步分析。
timestamp year month day hour minute
0 2023-09-16 08:00:00 2023 9 16 8 0
1 2023-09-16 09:30:00 2023 9 16 9 30
2 2023-09-16 11:15:00 2023 9 16 11 15
让我们逐步分解上面的代码,以了解实际发生了什么。
创建示例数据
在第一步中,我们将创建一个字典来存储 DateTime 数据。我们将其称为“data”,并使用单个键“timestamp”。此键将对应一个包含三个日期和时间字符串的列表作为其值。现在我们可以创建一个名为“df”的 Pandas DataFrame。此 DataFrame 将有一列名为“timestamp”,其中包含日期和时间字符串。
data = {'timestamp': ['2023-09-16 08:00:00', '2023-09-16 09:30:00', '2023-09-16 11:15:00']}
df = pd.DataFrame(data)
将“timestamp”列转换为 DateTime
在下一步中,我们需要将 DataFrame “df” 中的 “timestamp” 列从字符串格式转换为 Pandas DateTime 格式。为此,我们可以使用 pd.to_datetime()
函数。在此操作之后,“timestamp” 列包含 DateTime 对象。
df['timestamp'] = pd.to_datetime(df['timestamp'])
提取 DateTime 的各种组成部分
最后,我们需要提取存储在 “timestamp” 列中的 DateTime 对象的各种组成部分,并在 DataFrame 中为每个提取的组成部分创建新列。以下是每一行代码的作用
- df[‘year’] 从 “timestamp” 列中提取年份组成部分,并创建一个新的 “year” 列。
- df[‘month’] 提取月份组成部分,并创建一个 “month” 列。
- df[‘day’] 提取日期组成部分,并创建一个 “day” 列。
- df[‘hour’] 提取小时组成部分,并创建一个 “hour” 列。
- df[‘minute’] 提取分钟组成部分,并创建一个 “minute” 列。
以下是执行此操作的代码
df['year'] = df['timestamp'].dt.year
df['month'] = df['timestamp'].dt.month
df['day'] = df['timestamp'].dt.day
df['hour'] = df['timestamp'].dt.hour
df['minute'] = df['timestamp'].dt.minute
在此步骤中,我们已将基于字符串的时间戳列转换为 Pandas DateTime,然后提取了各种组成部分,例如年、月、日、小时和分钟。
Pandas DateTime 的用例
现在我们了解了如何使用 Pandas DateTime,让我们看看一些具体的场景和用例。我们可以在许多不同的场景中使用 Pandas DateTime,包括时间序列分析、过滤数据、计算时间差和格式化数据。让我们通过一个示例来探索这些用例,以便更好地理解它们。
1. 时间序列分析
时间序列分析是一种分析技术,用于研究在规则时间间隔收集或记录的数据点,从而能够检查数据中的模式、趋势和关系。它在各个领域都有实际应用,包括金融预测、气象学中的天气预报以及医疗保健,用于患者监控和疾病爆发检测等任务。
如前所述,时间序列分析涉及处理在一段时间内以规则间隔收集或记录的数据。Pandas DateTime 非常适合此用例。您可以轻松执行重新采样、聚合和绘图等操作。让我们考虑一个简单的时间序列分析示例,如下代码所示
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Generate sample time series data
date_rng = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
data = {'date': date_rng,
'value': np.random.randn(len(date_rng))}
df = pd.DataFrame(data)
# Set the 'date' column as the index
df.set_index('date', inplace=True)
# Resample data to monthly frequency and calculate the mean
monthly_mean = df['value'].resample('M').mean()
# Plot the original time series data
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(df.index, df['value'], label='Original Data')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Original Time Series Data')
plt.legend()
# Plot the monthly mean
plt.subplot(2, 1, 2)
plt.plot(monthly_mean.index, monthly_mean.values, label='Monthly Mean', color='orange')
plt.xlabel('Date')
plt.ylabel('Mean Value')
plt.title('Monthly Mean Time Series')
plt.legend()
plt.tight_layout()
plt.show()
上面的代码生成了一个带有随机值的示例时间序列数据集。这些值取自 2023 年的每一天。我们将 “date” 列设置为 DataFrame 的索引,并将数据重新采样为每月频率。使用此方法,我们将计算每个月的平均值。使用 Matplotlib 库,我们创建了两个子图,一个用于原始时间序列数据,另一个用于每月平均值。最后,我们显示两个图表以可视化原始数据及其每月平均值。
运行上面的代码应该会显示如下所示的时间序列图: 此代码演示了在 Pandas 中处理时间序列数据的基本知识,包括数据生成、重新采样和绘图。
2. 过滤数据
您可以轻松地根据特定的日期和时间范围过滤 DataFrame。当您想专注于特定时间段时,这非常有用。例如,请考虑以下代码
import pandas as pd
# Sample data with DateTime
data = {'Timestamp': ['2023-09-15 08:00:00', '2023-09-15 12:30:00', '2023-09-16 10:15:00', '2023-09-16 14:45:00'],
'Value': [50, 75, 60, 85]}
df = pd.DataFrame(data)
# Convert the 'Timestamp' column to DateTime
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
# Set 'Timestamp' as the DataFrame's index (important for time-based filtering)
df.set_index('Timestamp', inplace=True)
# Filtering data for a specific date range
start_date = '2023-09-15'
end_date = '2023-09-16'
filtered_df = df[start_date:end_date]
# Displaying the filtered DataFrame
print("Filtered Data:")
print(filtered_df)
在上面的代码中,我们创建了一个 DataFrame “df”,其中包含 “Timestamp” 和 “Value” 列,以表示时间序列数据。然后,我们使用 pd.to_datetime()
将 “Timestamp” 列转换为 Pandas DateTime 对象。这使我们能够将 时间戳 作为 DateTime 处理。为了启用基于时间的过滤,我们使用 set_index()
将 “Timestamp” 列设置为 DataFrame 的索引。之后,我们定义一个开始日期和一个结束日期,以指定我们要过滤的日期范围。在本例中,假设我们想要从 “2023-09-15” 到 “2023-09-16” 的数据。
然后,我们使用这些日期来过滤 DataFrame,创建一个新的 DataFrame “filtered_df”,其中仅包含指定日期范围内的数据。运行上面的代码应该会打印以下输出
Filtered Data:
Value
Timestamp
2023-09-15 08:00:00 50
2023-09-15 12:30:00 75
2023-09-16 10:15:00 60
2023-09-16 14:45:00 85
3. 计算时间差
Pandas DateTime 允许您计算 DateTime 值之间的时间间隔和差异。这在分析时间滞后或持续时间时很有价值。
import pandas as pd
# Create two DateTime objects
start_time = pd.to_datetime('2023-09-15 08:00:00')
end_time = pd.to_datetime('2023-09-15 10:30:00')
# Calculate the time difference
time_difference = end_time - start_time
print("Start Time:", start_time)
print("End Time:", end_time)
print("Time Difference:", time_difference)
当您运行此代码时,它将以小时、分钟和秒为单位显示开始时间、结束时间和它们之间的时间差。这对于测量两个事件之间的持续时间或计算时间序列数据集中的时间间隔等任务非常有用。
Start Time: 2023-09-15 08:00:00
End Time: 2023-09-15 10:30:00
Time Difference: 0 days 02:30:00
4. 分组和聚合
按 DateTime 组件(例如,每月、每周)分组数据并应用聚合函数可以为您的数据集提供有价值的见解。
import pandas as pd
import numpy as np
# Generate sample time series data
date_rng = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
data = {'date': date_rng,
'value': np.random.randint(1, 100, size=len(date_rng))}
df = pd.DataFrame(data)
# Set the 'date' column as the index
df.set_index('date', inplace=True)
# Group data by month and calculate the sum
monthly_sum = df['value'].resample('M').sum()
print(monthly_sum)
在上面的代码中,我们生成了一个示例时间序列数据集,其中包含 “date” 列和 “value” 列,其中包含 2023 年每天的随机值。然后,我们使用 set_index
将 “date” 列设置为 DataFrame 的索引,这对于基于时间的操作非常重要。之后,我们使用 resample('M')
按月(重新采样)对数据进行分组,然后应用 sum()
聚合函数来计算每个月的 “value” 总和。
最后,我们打印 monthly_sum
系列,其中显示了时间序列中每个月的 “value” 聚合总和
date
2023-01-31 1612
2023-02-28 1485
2023-03-31 1413
2023-04-30 1689
2023-05-31 1667
2023-06-30 1645
2023-07-31 1544
2023-08-31 1655
2023-09-30 1230
2023-10-31 1689
2023-11-30 1436
2023-12-31 1366
Freq: M, Name: value, dtype: int64
5. 日期格式化
Pandas DateTime 还允许您将 DateTime 对象格式化为具有自定义日期格式的字符串,以便更好地可视化或导出数据。
import pandas as pd
# Create a DateTime object
date_time = pd.to_datetime('2023-09-15 14:30:00')
# Format DateTime object into a custom string format
formatted_date = date_time.strftime('%Y-%m-%d %H:%M:%S')
print("Original DateTime:", date_time)
当您运行此代码时,它将显示原始 DateTime 和自定义格式化的日期字符串
Original DateTime: 2023-09-15 14:30:00
Formatted Date String: 2023-09-15 14:30:00
将 DateTime 对象格式化为自定义字符串对于更好地可视化、导出数据或以满足您需求的特定格式呈现日期和时间信息非常有用。您可以自定义格式字符串以包含各种组件和分隔符,如需。
常见问题解答
什么是 Pandas DateTime 格式?
Pandas DateTime 格式是表示日期和时间信息的标准化方式。它包括年、月、日、小时、分钟、秒等组件,并按特定顺序排列。
如何在 Pandas 中使用 DateTime?
您可以通过使用 pd.to_datetime()
将字符串转换为 DateTime 对象、对 DateTime 数据执行各种操作以及将 DateTime 对象格式化为字符串以进行显示来使用 Pandas DateTime。
如何将 DateTime 添加到 Pandas DataFrame?
要将 DateTime 添加到 Pandas DataFrame,您可以创建一个新列并使用 pd.to_datetime()
将 DateTime 值分配给它。
如何在 Pandas 中按 DateTime 选择数据?
您可以在 Pandas 中按 DateTime 选择数据,方法是创建一个布尔掩码,该掩码根据特定日期或时间范围过滤行。
Pandas DateTime 是在 Python 中处理日期和时间数据的强大工具。无论您是分析时间序列数据还是执行基于日期的过滤,Pandas 都提供了一种灵活高效的方式来处理 DateTime 值。因此,下次您在 Python 项目中遇到 DateTime 数据时,请记住利用 Pandas 让您的生活更轻松。
这篇文章由 Siddhant Varma 撰写。Siddhant 是一位全栈 JavaScript 开发者,精通前端工程。他曾与印度多家初创公司合作进行扩展,并在 Ed-Tech 和医疗保健行业拥有构建产品的经验。Siddhant 热衷于教学,并且擅长写作。他还向许多毕业生教授编程,帮助他们成为更优秀的未来开发者。