【问题标题】:Python Dataframe extract list of unique dates from a big datetimeindex of few million rowsPython Dataframe 从数百万行的大日期时间索引中提取唯一日期列表
【发布时间】:2021-03-04 11:34:13
【问题描述】:

我的数据框有大约 1700 万行。索引是日期时间。它是大约一秒分辨率的一年数据。现在我想从中提取一个唯一日期列表。

我的代码:

# sample df

df.index = DatetimeIndex(['2019-10-01 05:00:00', '2019-10-01 05:00:01',
               '2019-10-01 05:00:05', '2019-10-01 05:00:06',
               '2019-10-01 05:00:08', '2019-10-01 05:00:09',
               '2019-10-01 05:00:12', '2019-10-01 05:00:13',
               '2019-10-01 05:00:15', '2019-10-01 05:00:17',
               ...
               '2020-11-14 19:59:21', '2020-11-14 19:59:23',
               '2020-11-14 19:59:31', '2020-11-14 19:59:32',
               '2020-11-14 19:59:37', '2020-11-14 19:59:38',
               '2020-11-14 19:59:45', '2020-11-14 19:59:46',
               '2020-11-14 19:59:55', '2020-11-14 19:59:56'],
              dtype='datetime64[ns]', name='timestamp', length=17796121, freq=None)
dates = df.index.strftime('&Y-&m-%d').unique()

我上面的代码给出了输出。但它花了大约五分钟。有没有更好的方法可以更快地获取日期?

【问题讨论】:

  • @Code Different 我需要一些帮助。我在 for 循环中再次使用这些日期。比如for i in dates: auxdf = df.loc[i] 以前dates 是简单的字符串。现在,在您的解决方案之后,它是日期时间格式。如何生成简单的dates 字符串?

标签: python pandas dataframe datetime datetimeindex


【解决方案1】:

保存stftime 以备您实际需要字符串时使用。速度很慢。

试试这个:

dates = np.unique(dates.date)

【讨论】:

  • 它在 17 秒内给出了结果。超级快。太棒了。非常感谢。
  • 我需要一些帮助。我在 for 循环中再次使用这些日期。比如for i in dates: auxdf = df.loc[i] 以前dates 是简单的字符串。现在,在您的解决方案之后,它是日期时间格式。如何生成dates 的简单字符串?
  • 在处理 pandas / numpy 时避免循环。尽可能使用矢量化代码。如果您关心的只是“让它发挥作用”,请尝试:date_str = pd.to_datetime(dates).strftime('%Y-%m-%d'); for i in date_str: ...
  • 非常好。时间为 18 秒。它超快。我认为提取字符串格式可能需要几分钟。但不是。再次感谢。我认为自己仍然是一个初学者。我必须每天迭代并做一些操作。你觉得这里可以进行矢量化操作吗?
  • @Mainland,这些 cmets 会提出一些很棒的问题!
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 2018-10-22
  • 2021-12-08
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
相关资源
最近更新 更多