Python Pandas – 使用DatetimeIndex创建DataFrame,但覆盖结果列的名称
在Pandas中,使用DatetimeIndex
创建一个有时序索引的DataFrame是一种很常见的操作。通常,该结果包含日期、时间及其它相关信息。然而,我们有时会希望使用不同于默认列名的名称来表达这些信息。这里,我们将学习如何使用DatetimeIndex
来自定义列名。
更多Pandas相关文章,请阅读:Pandas 教程
创建一个有日期和时间的DataFrame
首先,让我们创建一个简单的DataFrame,其中包含了日期和时间。在这个例子中,我们将使用一个时间序列和一个随机数序列来生成数据:
import pandas as pd
import numpy as np
np.random.seed(0)
# 生成时间序列和数据序列
dates = pd.date_range('20220115 01:00:00', periods=10, freq='H')
data = np.random.randint(1, 5, (10,))
在上述代码中,我们使用pd.date_range
函数生成了一个从’20220115 01:00:00’开始,周期为小时的由10个时间戳组成的时间序列,即:
DatetimeIndex(['2022-01-15 01:00:00', '2022-01-15 02:00:00',
'2022-01-15 03:00:00', '2022-01-15 04:00:00',
'2022-01-15 05:00:00', '2022-01-15 06:00:00',
'2022-01-15 07:00:00', '2022-01-15 08:00:00',
'2022-01-15 09:00:00', '2022-01-15 10:00:00'],
dtype='datetime64[ns]', freq='H')
接下来,我们使用np.random.randint
函数生成一个随机数序列,最小值为1,最大值为4,共有10个数据。这样,我们就得到了一个包含日期和时间、随机数数据的两列数据集合。
使用上述数据,我们可以轻松地创建一个DataFrame,只需要使用pd.DataFrame
即可:
# 将时间序列和数据加入到DataFrame中
df = pd.DataFrame({'data':data}, index=dates)
在上述代码中,我们使用一个字典{'data':data}
来创建一个Series对象,将之前生成的随机数序列作为其值,列名为”data”。然后,我们使用pd.DataFrame
将Series对象与时间序列相结合,得到了一个新的DataFrame。此时,我们可以使用df.head()
方法查看前几条记录:
data
2022-01-15 01:00:00 1
2022-01-15 02:00:00 4
2022-01-15 03:00:00 2
2022-01-15 04:00:00 1
2022-01-15 05:00:00 3
重置列名
我们可以看到,在上述代码中,我们给数据列设置了一个默认的名称”data”。如果我们希望使用一些更明确的名称来描述这一列,我们可以重置其名称。我们可以通过以下代码将其重命名为”score”:
df = df.rename(columns={'data': 'score'})
在这里,我们使用了df.rename
函数,该函数接受一个字典作为参数,该字典由旧名称与新名称组成。然后,我们重新赋值得到一个新的DataFrame,其列名已经被替换为”score”。
如果我们现在查看DataFrame的头几行,就会看到列名已经被更新:
score
2022-01-15 01:00:00 1
2022-01-15 02:00:00 4
2022-01-15 03:00:00 2
2022-01-15 04:00:00 1
2022-01-15 05:00:00 3
使用DatetimeIndex来创建自定义列名
如果我们想要更精确地描述这个DataFrame中的日期、时间信息,我们可以使用DatetimeIndex
来创建自定义列名。例如,在这个例子中,我们可以创建两个新的列,分别表示年份和小时。这个例子中的代码如下所示:
# 将时间序列分解成不同的时间单元
df["Year"] = df.index.year
df["Hour"] = df.index.hour
在这个例子中,我们使用了df.index.year
和df.index.hour
函数,将时间序列分解成了年份和小时。然后,我们将这两列添加到了DataFrame中。
现在,我们可以查看DataFrame的头几行,看一下新的列名:
score Year Hour
2022-01-15 01:00:00 1 2022 1
2022-01-15 02:00:00 4 2022 2
2022-01-15 03:00:00 2 2022 3
2022-01-15 04:00:00 1 2022 4
2022-01-15 05:00:00 3 2022 5
正如我们所看到的,DataFrame中现在还包括了”Year”和”Hour”两列,这些列名是由我们自定义的。
使用set_index创建重置列名的DataFrame
另外,我们也可以使用set_index
函数来创建一个自定义列名的日期时间DataFrame。下面是一个示例代码:
# 使用set_index函数创建一个新的DataFrame,自定义列名
df_index = pd.DataFrame({'score': data,
'Year': dates.year,
'Hour': dates.hour}).set_index(dates)
df_index.head()
在这个代码中,我们使用了pd.DataFrame
来创建了一个字典,其中包含了分数、年份和小时数据列。 然后,我们调用set_index
函数将时间序列与DataFrame相结合,并将其设置为索引。 这样,我们就得到了一个带有我们所选择的自定义列名的新DataFrame。
score Year Hour
2022-01-15 01:00:00 1 2022 1
2022-01-15 02:00:00 4 2022 2
2022-01-15 03:00:00 2 2022 3
2022-01-15 04:00:00 1 2022 4
2022-01-15 05:00:00 3 2022 5
与之前的DataFrame相比,我们可以看到,新DataFrame中的列名已经被更新。
结论
在这篇文章中,我们学习了如何使用Pandas的DatetimeIndex
和set_index
函数创建包含日期和时间信息的DataFrame,并且如何自定义列名来表示这些信息。我们了解了如何使用rename
函数重置列名,以及如何使用df.index.year
和df.index.hour
函数创建自定义的列名。当我们需要更好地描述时间序列数据时,这些功能都非常有用。