python - Pandas between_time 等效于 Dask DataFrame

标签 python pandas dask

我有一个使用 dd.read_csv("./*/file.csv") 创建的 Dask 数据框,其中 * glob 是每个日期的文件夹。在连接的数据框中,我想过滤掉时间的子集,就像我使用 pd.between_time("09:30", "16:00") 一样。

因为 Dask 的索引内部表示没有 Pandas 的 DateTimeIndex 的好的特性,所以我在过滤 Pandas 中通常会做的事情上没有取得任何成功。如果不求助于简单的映射函数/循环,我无法让它在 Dask 中工作。

由于分区是按日期划分的,也许可以通过转换为 Pandas 数据帧然后返回到 Dask 分区来利用这一点,但似乎应该有更好的方法。


使用安格斯回答中使用的示例进行更新。

enter image description here

我想我不明白答案/评论中查询的逻辑。 Pandas 是否足够聪明,不会将 bool 掩码逐字解释为字符串并进行正确的日期时间比较?

最佳答案

在 Dask 中过滤就像删除了一些便利功能的 pandas 一样。

例如,如果您有以下数据:

time,A,B
6/18/2020 09:00,29,0.330799201
6/18/2020 10:15,30,0.518081116
6/18/2020 18:25,31,0.790506469

以下代码:

import dask.dataframe as dd

df = dd.read_csv('*.csv', parse_dates=['time']).set_index('time')
df.loc[(df.index > "09:30") & (df.index < "16:00")].compute()

(如果在 2020 年 6 月 18 日运行)将返回:

time,A,B
2020-06-18 10:15:00,30,0.518081

编辑:

以上答案仅针对当前日期进行过滤; pandas 将时间字符串解释为具有当前日期的日期时间值。如果您想过滤特定时间之间所有日期的值,有一种解决方法可以从日期时间列中删除日期:

import dask.dataframe as dd

df = dd.read_csv('*.csv',parse_dates=['time'])
df["time_of_day"] = dd.to_datetime(df["time"].dt.time.astype(str))
df.loc[(df.time_of_day > "09:30") & (df.time_of_day < "16:00")].compute()

请记住,此方法可能会降低速度,这可能是对较大数据集的担忧。

关于python - Pandas between_time 等效于 Dask DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62460171/

相关文章:

python - Pandas 数据透视表 : Percentage of row calculation for non-numeric values

numpy - xarray 或 dask 真的支持内存映射吗?

python - 为 DASK 工作人员使用新的 python 环境

python - 在 python 中映射两个列表之间的值的有效方法

python - 如何将 Tavern 测试的响应保存在 JSON 文件中?

python - pandas 中 'float64' 列类型的总和返回 float 而不是 numpy.float64

python - dask client.submit 的行为

python - 笨拙的理解清理

python - 将 REST API 的 JSON 响应作为输入数据传递到 APACHE SOLR 中

python - 使用 flutter 创建股票的蜡烛图