【问题标题】:Getting year and week from a datetime series in a dask dataframe?从 dask 数据框中的日期时间序列中获取年份和星期?
【发布时间】:2017-08-05 10:59:41
【问题描述】:

如果我有一个 Pandas 数据框和一个日期时间类型的列,我可以获得如下年份:

df['year'] = df['date'].dt.year

使用 dask 数据框,这是行不通的。如果我先计算,像这样:

df['year'] = df['date'].compute().dt.year

我得到ValueError: Not all divisions are known, can't align partitions. Please useset_indexorset_partitionto set the index.

但如果我这样做:

df['date'].head().dt.year

效果很好!

那么如何在 dask 数据框中获取日期时间序列的年份(或星期)?

【问题讨论】:

标签: python performance date pandas dask


【解决方案1】:

.dt datetime 命名空间存在于 Dask 系列对象上。以下是它的使用自包含:

In [1]: import pandas as pd

In [2]: df = pd.util.testing.makeTimeSeries().to_frame().reset_index().head(10)

In [3]: df  # some pandas data to turn into a dask.dataframe
Out[3]: 
       index         0
0 2000-01-03 -0.034297
1 2000-01-04 -0.373816
2 2000-01-05 -0.844751
3 2000-01-06  0.924542
4 2000-01-07  0.507070
5 2000-01-10  0.216684
6 2000-01-11  1.191743
7 2000-01-12 -2.103547
8 2000-01-13  0.156629
9 2000-01-14  1.602243

In [4]: import dask.dataframe as dd

In [5]: ddf = dd.from_pandas(df, npartitions=3)

In [6]: ddf['year'] = ddf['index'].dt.year  # use the .dt namespace

In [7]: ddf.head()
Out[7]: 
       index         0  year
0 2000-01-03 -0.034297  2000
1 2000-01-04 -0.373816  2000
2 2000-01-05 -0.844751  2000
3 2000-01-06  0.924542  2000

【讨论】:

  • 谢谢!但是,如果我的数据框已经是一个 dask 数据框,并且我想将日期变成年份怎么办?即,在您的示例中,如果 df 已经是 Pandas 数据框。
  • 在上面的例子中,我们使用dd.from_pandas从pandas数据框df创建了一个dask数据框ddf。
  • 我认为评论提出了ddf['year'] = df['index'].dt.year 应该是ddf['year'] = ddf['index'].dt.year 的观点。注意df["index"] 和ddf["index"] 之间的变化。
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多