Построение ежемесячных данных с использованием groupby в наборе данных dask

У меня есть большой CSV файл, который открывается с помощью Даска.

import numpy as np
import pandas as pd
import hvplot.pandas
import hvplot.dask
import intake

data = '../file.csv'
ddf = intake.open_csv(data).to_dask()
ddf.head()

Datetime    latitude    longitude   Temp_2m(C)  
1   1980-01-02 03:00:00     30.605  50.217  5.31
2   1980-01-02 04:00:00     30.605  50.217  5.36
3   1980-01-02 05:00:00     30.605  50.217  7.04
4   1980-01-02 06:00:00     30.605  50.217  10.24

Я хочу строить Temp_2m(C) ежемесячно с помощью hvplot. График с почасовыми данными Datetime выполнен правильно, но когда я хочу сгруппировать Datetime, как показано ниже, он возвращает ошибку.

# Convert 'Datetime' column to 'datetime64'
ddf["Datetime"] = ddf["Datetime"].astype("M8[us]")

# set index column
ddf = ddf.set_index('Datetime')

g = pd.Grouper(freq='M', key='Datetime')
month_ddf = dff.groupby(g).mean()

# plot
month_ddf.hvplot('Temp_2m(C)')

ОШИБКА: ValueError: all keys need to be the same shape в чем моя ошибка?

для ответа @ frankr6591:

month_ddf.describe()
Dask DataFrame Structure:
    latitude    longitude   Temp_2m(C)
npartitions=1                                           
    float64     float64     float64
    ...     ...     ... 
Dask Name: describe-numeric, 89 tasks

person HMadadi    schedule 29.11.2020    source источник
comment
Пожалуйста, не делитесь скриншотами. Им очень трудно помочь вам. Вместо этого поделитесь некоторыми данными.   -  person Serge de Gosson de Varennes    schedule 29.11.2020
comment
@Serge de Gosson de Varennes, Спасибо за комментарий, я его отредактировал.   -  person HMadadi    schedule 29.11.2020
comment
Вы сделали month_ddf.describe (), чтобы увидеть его форму? При повторном просмотре ERROR кажется, что month_ddf не является однородным.   -  person frankr6591    schedule 29.11.2020
comment
@ frankr6591, я к вопросу добавил month_ddf.describe().   -  person HMadadi    schedule 30.11.2020
comment
@HMadadi, пожалуйста, используйте print (month_ddf.describe ()), чтобы мы могли видеть всю таблицу, а не ...   -  person frankr6591    schedule 30.11.2020
comment
@ frankr6591, с print(month_ddf.describe()) он снова возвращает тот же результат.   -  person HMadadi    schedule 30.11.2020


Ответы (1)


Я использовал to_datetime () и получил правильный график с помощью .plot () ... столкнулся с проблемами при установке hvplot.

import numpy as np
import pandas as pd
# FIXME : the following does not work
#import hvplot.pandas
%matplotlib inline

d = dict(datetime = ['1980-01-02 02:00:00',
                        '1980-01-02 03:00:00',
                        '1980-01-02 04:00:00',
                        '1980-01-02 05:00:00',
                        '1980-07-02 06:00:00'],
            latitude = [30.605 for n in range(5)],            
            longitude = [50.217 for n in range(5)],
            Temp_2m = [np.random.random()*10 for n in range(5)])
df = pd.DataFrame(d)

df['datetime'] = pd.to_datetime(df['datetime'])
df['mon'] = df['datetime'].dt.to_period('M')
print(df)

ddf = df.groupby('mon').mean()
print(ddf)

# This works on my py3.7
ddf.plot('Temp_2m')

# This fails because hvplot could not be imported. 
ddf.hvplot('Temp_2m')

             datetime  latitude  longitude   Temp_2m      mon
0 1980-01-02 02:00:00    30.605     50.217  2.512897  1980-01
1 1980-01-02 03:00:00    30.605     50.217  0.247358  1980-01
2 1980-01-02 04:00:00    30.605     50.217  7.678030  1980-01
3 1980-01-02 05:00:00    30.605     50.217  0.637331  1980-01
4 1980-07-02 06:00:00    30.605     50.217  2.156502  1980-07


         latitude  longitude   Temp_2m
mon                                   
1980-01    30.605     50.217  5.080373
1980-07    30.605     50.217  1.324140

введите описание изображения здесь

person frankr6591    schedule 29.11.2020
comment
Спасибо за ваш ответ, потому что я открываю свой CSV-файл с помощью dask, с вашим решением, оно возвращает ошибку AttributeError: 'DataFrame' object has no attribute 'dt' . - person HMadadi; 29.11.2020
comment
В моем коде "dt" заменено на "datetime" ... - person frankr6591; 29.11.2020
comment
ваш ответ правильный, но я хочу использовать dask, чтобы принять его. У меня очень большой csv файл, который я должен открыть с помощью dask. Я поддержал ваш ответ. - person HMadadi; 29.11.2020