📅  最后修改于: 2023-12-03 15:18:13.567000             🧑  作者: Mango
Pandas 是 Python 中非常流行的数据处理库,其中 DataFrame 类型的数据结构支持方便地处理和操作时间数据。本文将介绍 Pandas DataFrame 的两个时间相关的数据类型 - DatetimeIndex 和 Timedelta。我们将探讨这些类型的创建,索引和对它们执行各种操作的基本方法。
DatetimeIndex 类是 Pandas 中使用最广泛的时间相关数据类型之一。可以将其视为将时间戳作为索引的 Pandas series 的扩展。 为了使用 DatetimeIndex,我们首先需要将时间戳转换为 DatetimeIndex 对象。可以使用 pandas.to_datetime() 函数将字符串或数字时间戳转换为 DatetimeIndex,例如:
import pandas as pd
date_strings = ['01-01-2019 09:00:00', '01-01-2019 09:30:00', '01-01-2019 10:00:00']
dates = pd.to_datetime(date_strings)
print(dates)
此代码将打印以下输出:
DatetimeIndex(['2019-01-01 09:00:00', '2019-01-01 09:30:00', '2019-01-01 10:00:00'], dtype='datetime64[ns]', freq=None)
请注意,pandas.to_datetime() 返回的是 DatetimeIndex 对象,这意味着您可以在有需要时将其用作 Pandas DataFrame 的索引。可以通过以下方式将日期用作 DataFrame 的索引:
import pandas as pd
date_strings = ['01-01-2019 09:00:00', '01-01-2019 09:30:00', '01-01-2019 10:00:00']
dates = pd.to_datetime(date_strings)
df = pd.DataFrame({'time': dates, 'value': [1, 2, 3]})
df = df.set_index('time')
print(df)
此代码将打印以下输出:
value
time
2019-01-01 09:00:00 1
2019-01-01 09:30:00 2
2019-01-01 10:00:00 3
在这个示例中,我们导入 Pandas,创建几个日期字符串并将其用 pandas.to_datetime() 转换为 DatetimeIndex。然后,我们使用 Pandas DataFrame创建 function,将 DatetimeIndex 插入其中并将其设置为 DataFrame 的索引。
有了 DatetimeIndex,您可以很容易地从 Pandas DataFrame 中提取数据。例如,假设您想提取特定日期的数据。假设 df 为我们之前创建的 Pandas DataFrame:
import pandas as pd
date_strings = ['01-01-2019 09:00:00', '01-01-2019 09:30:00', '01-01-2019 10:00:00']
dates = pd.to_datetime(date_strings)
df = pd.DataFrame({'time': dates, 'value': [1, 2, 3]})
df = df.set_index('time')
# extract data from specific date
specific_date = pd.Timestamp('2019-01-01 09:30:00')
specific_data = df.loc[specific_date]
print(specific_data)
此代码将打印以下输出:
value 2
Name: 2019-01-01 09:30:00, dtype: int64
我们使用 Pandas Timestamp 创建了一个特定日期,并使用该日期的 .loc[] 属性从 Pandas DataFrame 中提取数据。 DatetimeIndex 还支持许多方便的操作,例如切片和在一定范围内选择日期。例如:
import pandas as pd
date_strings = ['01-01-2019 09:00:00', '01-01-2019 09:30:00', '01-01-2019 10:00:00']
dates = pd.to_datetime(date_strings)
df = pd.DataFrame({'time': dates, 'value': [1, 2, 3]})
df = df.set_index('time')
# slice between two dates
start_date = pd.Timestamp('2019-01-01 09:00:00')
end_date = pd.Timestamp('2019-01-01 10:00:00')
sliced_data = df.loc[start_date:end_date]
print(sliced_data)
此代码将打印以下输出:
value
time
2019-01-01 09:00:00 1
2019-01-01 09:30:00 2
2019-01-01 10:00:00 3
在这个示例中,我们使用 Pandas Timestamp 创建两个日期,并使用这些日期来切片 Pandas DataFrame。结果 DataFrame 包含两个输入日期之间的所有数据。
Timedelta 是 Pandas 中另一种时间相关的类型,用于表示两个时间之间的时间差。例如,如果您想知道某个事件发生后经过了多长时间,可以使用 Timedelta 来计算。
为了演示如何使用 Timedelta,请考虑以下示例。假设您有一个将在 30 分钟后开始的事件,您想知道现在距离该事件开始还有多长时间。您可以使用以下代码:
import pandas as pd
start_event = pd.Timestamp('2022-12-25 00:00:00')
now = pd.Timestamp.now()
time_to_event = start_event - now
print('Time until event:', time_to_event)
此代码将打印以下输出:
Time until event: 949 days 20:42:22.151752
在这个示例中,我们导入 Pandas 并使用 pd.Timestamp() 方法创建开始事件时间戳和当前时间戳。然后,我们使用开始事件时间戳减去现在的时间戳,从而得到距离事件开始的时间差。
与 DatetimeIndex 一样,在 Pandas DataFrame 中使用 Timedelta 数据类型也很容易。例如,假设您有一个时间戳数据列,您希望添加一个新的数据列,表示该时间戳与先前时间戳之间的时间差。您可以使用以下代码来实现:
import pandas as pd
date_strings = ['01-01-2019 09:00:00', '01-01-2019 09:30:00', '01-01-2019 10:00:00', '01-01-2019 10:30:00']
dates = pd.to_datetime(date_strings)
df = pd.DataFrame({'time': dates})
df['time_diff'] = df['time'] - df['time'].shift(1)
print(df)
此代码将打印以下输出:
time time_diff
0 2019-01-01 09:00:00 NaT
1 2019-01-01 09:30:00 00:30:00
2 2019-01-01 10:00:00 00:30:00
3 2019-01-01 10:30:00 00:30:00
在这个示例中,我们使用 Pandas DataFrame 创建函数,可以使用 Pandas Timestamp 创建时间戳并使用 pandas.to_datetime() 方法将字符串时间戳转换为 Pandas DatetimeIndex。然后,我们使用 .shift() 方法将时间戳向前位移一位,并使用逐个元素减法计算时间差,将其作为数据框的新列添加到数据框中。
在本文中,我们介绍了 Pandas DataFrame 中的两个时间相关的数据类型 - DatetimeIndex 和 Timedelta。我们讨论了如何创建和使用这些数据类型,以及在 Pandas DataFrame 中进行各种时间操作的基本方法。DatatimeIndex 和 Timedelta 是处理时间相关数据的强大工具,能够大大简化您的数据处理和分析工作!