在 python 数据框中添加新的自定义列

数据挖掘 Python 熊猫 数据框
2022-03-09 13:10:30

我需要在 python 数据框中添加一个新列,其中包含一月份的日期。每个日期在列中重复 24 次,无需任何干预。因此,条目总数将为 31*24 = 744 个条目。你能帮我编码这部分吗?

1个回答

事实证明这很简单!有一个方便的方法调用repeat日期时间索引。以下是步骤:

import pandas as pd

定义日期范围,提供开始和结束

jan = pd.date_range(start="1-Jan-2018", end="31-Jan-2018")    # could specify any year

现在提供您想要重复每个日期的次数并创建重复的列

num_repeats = 24
repeated_jans = jan.repeat(num_repeats)

让我们创建随机虚拟数据帧作为基础

total_dates = num_repeats * len(jan)    # 24 x 31 = 744
df = pd.DataFrame(np.random.randint(0, 10, total_dates))

这就是我们添加列的方式 - 列的名称可以是任何内容

df['repeated_jans_lalala'] = repeated_jans

看看一些日期:

print(df.iloc[[0, 24, 48, 71, 72]])    # multiples of 24...we can see one repeated date

    0 repeated_jans_lalala
0   7    2018-01-01
24  4    2018-01-02
48  3    2018-01-03
71  6    2018-01-03
72  3    2018-01-04

如果尝试将该列添加到具有不同行数的数据框中,我们会收到错误消息:

df_error = pd.DataFrame(np.random.randint(0, 10, 743))    # require 744!
#df_error['repeated_jans'] = repeated_jans                         # raises ValueError

如果要更改日期的外观,可以使用日期上strftime方法

jans_fancy = jans.strftime('%d-%B-%y')
df['fancy_jans'] = jans_fancy

df.head()

0   repeated_jans_lalal  fancy_jans
0   7   2018-01-01       01-January-18
1   2   2018-01-01       01-January-18
2   8   2018-01-01       01-January-18
3   9   2018-01-01       01-January-18
4   7   2018-01-01       01-January-18

如果您不想显示实际年份,请忽略该%y部分!