如何使用Python熊猫有效地将每小时数据转换为一年中每一天的日期和时间?

时间:2017-05-03 13:16:06

标签: python pandas dataframe

我有一个pandas DataFrame,代表一天中每小时的值,我想报告一年中每一天的每个值。我写过“天真的”。这样做的方式。有更有效的方法吗?

天真的方式(正常,但需要很多时间):

dfConsoFrigo = pd.read_csv("../assets/datas/refregirateur.csv", sep=';')
dataframe = pd.DataFrame(columns=['Puissance'])
iterator = 0
for day in pd.date_range("01 Jan 2017 00:00", "31 Dec 2017 23:00", freq='1H'):
    iterator = iterator % 24
    dataframe.loc[day] = dfConsoFrigo.iloc[iterator]['Puissance']
    iterator += 1

输入(时间;值)24行:

Heure;Puissance
00:00;48.0
01:00;47.0
02:00;46.0
03:00;46.0
04:00;45.0
05:00;46.0
...
19:00;55.0
20:00;53.0
21:00;51.0
22:00;50.0
23:00;49.0

预期输出(8760行):

                     Puissance
2017-01-01 00:00:00         48
2017-01-01 01:00:00         47
2017-01-01 02:00:00         46
2017-01-01 03:00:00         46
2017-01-01 04:00:00         45
...
2017-12-31 20:00:00         53
2017-12-31 21:00:00         51
2017-12-31 22:00:00         50
2017-12-31 23:00:00         49

1 个答案:

答案 0 :(得分:1)

我认为你需要numpy.tile

np.random.seed(10)
df = pd.DataFrame({'Puissance':np.random.randint(100, size=24)})
rng = pd.date_range("01 Jan 2017 00:00", "31 Dec 2017 23:00", freq='1H')

df = pd.DataFrame({'a':np.tile(df['Puissance'].values, 365)}, index=rng)
print (df.head(30))
                      a
2017-01-01 00:00:00   9
2017-01-01 01:00:00  15
2017-01-01 02:00:00  64
2017-01-01 03:00:00  28
2017-01-01 04:00:00  89
2017-01-01 05:00:00  93
2017-01-01 06:00:00  29
2017-01-01 07:00:00   8
2017-01-01 08:00:00  73
2017-01-01 09:00:00   0
2017-01-01 10:00:00  40
2017-01-01 11:00:00  36
2017-01-01 12:00:00  16
2017-01-01 13:00:00  11
2017-01-01 14:00:00  54
2017-01-01 15:00:00  88
2017-01-01 16:00:00  62
2017-01-01 17:00:00  33
2017-01-01 18:00:00  72
2017-01-01 19:00:00  78
2017-01-01 20:00:00  49
2017-01-01 21:00:00  51
2017-01-01 22:00:00  54
2017-01-01 23:00:00  77
2017-01-02 00:00:00   9
2017-01-02 01:00:00  15
2017-01-02 02:00:00  64
2017-01-02 03:00:00  28
2017-01-02 04:00:00  89
2017-01-02 05:00:00  93