我正在尝试使用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工作的任何建议?谢谢!