Pandas DateTime:何时以及如何使用它
作者:社区 / 开发者
2023年12月06日
导航到
作为 Python 开发者,您经常处理 DateTime 值,尤其是在处理数据相关操作时。使用 DateTime 数据在分析或处理大量数据时非常有帮助。Python 开发者今天最常用且最流行的库之一就是 Pandas。
使用 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)
在上面的代码中,我们创建了一个名为 'df' 的 DataFrame,其中包含 'Timestamp' 和 'Value' 列,以表示时间序列数据。然后我们使用 pd.to_datetime()
将 'Timestamp' 列转换为 Pandas DateTime 对象。这允许我们将时间戳作为 DateTime 对象来处理。为了启用基于时间的过滤,我们使用 set_index()
将 'Timestamp' 列设置为 DataFrame 的索引。之后,我们定义一个开始日期和一个结束日期来指定我们想要过滤的日期范围。在这种情况下,假设我们想要从 '2023-09-15' 到 '2023-09-16' 的数据。
然后我们使用这些日期来过滤 DataFrame,创建一个名为 'filtered_df' 的新 DataFrame,其中只包含指定日期范围内的数据。运行上述代码应输出以下内容
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?
要在Pandas DataFrame中添加DateTime,您可以创建一个新的列,并使用pd.to_datetime()
将DateTime值赋给它。
如何在Pandas中通过DateTime选择数据?
您可以通过创建一个布尔掩码来选择Pandas中的DateTime数据,该掩码根据特定的日期或时间范围过滤行。
Pandas DateTime是Python中处理日期和时间数据的强大工具。无论您是在分析时间序列数据还是执行基于日期的过滤,Pandas都提供了一种灵活且高效的方式来处理DateTime值。所以,下次在您的Python项目中遇到DateTime数据时,请记住利用Pandas使您的生活更轻松。
本文由Siddhant Varma撰写。Siddhant是一位全栈JavaScript开发者,擅长前端工程。他曾在印度与多个初创公司合作,并拥有在教育和医疗保健行业构建产品的经验。Siddhant对教学充满热情,写作技巧娴熟。他还教授了许多毕业生编程,帮助他们成为更好的未来开发者。