dask set_index给出了与from_pandas相比不同的索引类型?

时间:2017-02-05 05:56:18

标签: python dataframe dask

我正在尝试使用dask读取csv,然后根据其时间戳索引对其进行重新取样。

csv文件的内容如下:

Time,data
2015-01-01,0
2015-01-02,1
2015-01-03,2
2015-01-04,3
...

方法1:使用dask直接加载数据,然后设置索引:

import pandas as pd
import dask.dataframe as dd
data_sample = dd.read_csv('test_data.csv')
meta=pd.Series([], name='time',dtype=pd.Timestamp)
data_sample['Time'] = data_sample['Time'].map_partitions(pd.to_datetime, meta=meta)
data_sample2 = data_sample.set_index(data_sample['Time'])
data_sample2.index.head()

我得到了:

DatetimeIndex(['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04',
           '2015-01-05'],
          dtype='datetime64[ns]', name='Time', freq=None)

但是,当我想要做的时候:     data_sample2.resample( '1M')。意味着()

我有以下错误:     TypeError:仅对DatetimeIndex,TimedeltaIndex或PeriodIndex有效,但得到'Index'的实例

方法2:

如果我使用pandas加载数据然后将其转换为dask.dataframe,则似乎没问题:

pd_data = pd.read_csv('test_data.csv')
pd_data['Time'] = pd.to_datetime(pd_data['Time'])
pd_data.set_index(pd_data['Time'],inplace=True)
pd_data.index
data_sample_from_pd = dd.from_pandas(pd_data, npartitions=1)
data_sample_from_pd.index.head()

dtype似乎是一样的:

DatetimeIndex(['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04',
           '2015-01-05'],
          dtype='datetime64[ns]', name='Time', freq=None)

重新取样工作正常:

data_sample_from_pd.resample('1M').mean().head()

data
2015-01-31  15.0
2015-02-28  44.5
2015-03-31  74.0
2015-04-30  94.5

知道为什么这两种方法在执行resample时会产生不同的结果?有关如何使方法1工作的任何建议?谢谢!

0 个答案:

没有答案