【问题标题】:Looping through pandas dataframe to generate a date range循环遍历 pandas 数据框以生成日期范围
【发布时间】:2020-02-17 01:57:41
【问题描述】:

我有一个如下所示的数据框:

对于每个范围 'From' 到 'To',我想创建一个 date_range。所以我正在循环数据框。对于每一行,都会生成一个 DatetimeIndex。

我尝试将其转换为数据帧并将其附加到一个空数据帧,因此我有整体范围。但是最终的数据框(day_wise)最终是空的!所以不确定问题出在哪里。

day_wise = pd.DataFrame(columns=['day'])
for index, row in elec_ds.iterrows():
  for_day = pd.date_range(start=row['From'], end=row['To'], freq='D')
  for_day = pd.DataFrame(for_day)
  day_wise.append(for_day)

【问题讨论】:

  • DataFrame append 方法与 Python 的 list append 方法不同。对于 DataFrame,您必须分配给一个变量。例如,day_wise = day_wise.append(for_day)

标签: python pandas time-series date-range


【解决方案1】:

您可以完全避免 for 循环。假设您使用的是 pandas v0.25 或更高版本,因此您可以使用 explode

day_wise = df.apply(lambda row: pd.date_range(row['From'], row['To']), axis=1) \
                .explode() \
                .to_frame('Day')

结果:

    Day
0   2018-10-23
0   2018-10-24
0   2018-10-25
0   2018-10-26
0   2018-10-27

解释:

  • apply(lambda ..., axis=1) 从每一行的 FromTo 列中创建一个日期范围
  • explode 将范围拆分为单独的日期
  • to_frame 将 Series 转换为 DataFrame

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 2021-12-30
    • 2011-05-19
    • 1970-01-01
    • 2011-02-19
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多