2016-11-02 3 views
-1

Мой Dataset:Рассчитать среднее значение Python для даты и времени вручную?

Отметка Температура
9/1/2016 0:00:08 53,8
9/1/2016 0:00:38 53,8
9/1/2016 0:01:08 53,8
9/1/2016 0:01:38 53,8
9/1/2016 0:02:08 53,8
9/1/2016 0:02:38 54,1
9/1/2016 0:03: 08 54,1
9/1/2016 0:03:38 54.1
9/1/2016 0:04:38 54
9/1/2016 0:05:38 54
9/1/2016 0:06:08 54
9/1/2016 0:06:38 54
9/1/2016 0:07:08 54
9/1/2016 0:07:38 54
9/1/2016 0:08:08 54,1
9/1/2016 0:08:38 54,1
9/1/2016 0:09 : 38 54,1
9/1/2016 0:10:32 54
9/1/2016 0:11:02 54
9/1/2016 0:11:32 54
9/1/2016 0 : 00: 08 54
9/2/2016 0:00:20 32
9/2/2016 0:00:50 32
9/2/2016 0:01:20 32
9/2/2016 0:01:50 32
9/2/2016 0:02:20 32
9/2/2016 0:02:50 32
9/2/2016 0:03:20 32
9/2/2016 0:03:50 32
9/2/2016 0:04:20 32
9/2/2016 0:04:50 32
9/2/2016 0:05:20 32
9/2/2016 0:05:50 32
9/2/2016 0:06:20 32
9/2/2016 0:06:50 32

from datetime import datetime 
import pandas as pd 

def same_day(date_string):   
return datetime.strptime(date_string, "%m/%d/%Y %H:%M:%S").strftime('%m-%d') 

df = pd.read_csv('dataset.csv', index_col=[0],parse_dates=[0], usecols=[0,1,2]) 
********calculate per day 
print (df.index.strftime('%d%m%H')) 
print (df.groupby([df.index.strftime('%d%m%H')]).mean()) 

Здесь Как экспортировать в JSON массива Формиат ??

#****** exporting in CSV format 
df.reset_index().to_csv('dataset.csv') 

Теперь я хочу дать дату вручную и проверьте Average в течение 5 часов и 10 мин для каждого DAY..like that..Where мы можем дать дату и время вручную ?? Пожалуйста помоги?

для Eg: - для Дата 01-09-2016 10 мин Avg является 36,08 для Дата 02-09-2016 10 мин Avg является 39,05

для Дата 01-09-2016 5 часов Среднего является 45.2 Дата 01-09-2016 5 час. Средняя оценка: 44.3

Как и для каждой даты, независимо от даты, которую я даю, и любого времени, которое я даю.

С помощью этого ниже кода я могу найти менее 2 мин температура: -

import pandas as pd 
    df = pd.read_csv('dataset.csv', parse_dates=['Timestamp']) 
    #print (df) 

    mask = df.Timestamp.dt.minute < 2 
    df1 = df[mask] 

    df2 = df1.Timestamp.dt.date == pd.to_datetime('9/1/2016').date() 
    print (df2) 

для вычисления среднего значения(): -

df3 = df2.set_index('Timestamp', drop=False).resample('D').mean() 
    print (df3) 

Ошибка приходит: -

AttributeError: 'Series' object has no attribute 'set_index' 
+0

Фильтр DataFrame для * введенного вручную * даты/времени; суммировать значения для требуемого временного интервала (ов); разделите общее количество на время. – wwii

+0

Проведите некоторое чтение, посмотрите документацию DataFrame, чтобы узнать, что доступно, просмотрите несколько видеороликов, изучите примеры, которые вы найдете, научитесь фильтровать DataFrame, научиться перебирать DataFrame. Не совсем понятно, что вам нужно, есть много деталей. В тот же день вы показываете две разные 5-часовые средние значения, но это не имеет никакого смысла. Есть более двух пятичасовых периодов в день. – wwii

+0

http://stackoverflow.com/q/20233071/2823755, – wwii

ответ

0

Я создал DataFrame из ваших данных примера (я сделал разделитель файла):

df = pd.read_csv('foo.csv',sep = '\t', header = 0, 
       parse_dates = [0], infer_datetime_format = True) 
>>> df.head() 
      Timestamp Temperature 
0 2016-09-01 00:00:08   53.8 
1 2016-09-01 00:00:38   53.8 
2 2016-09-01 00:01:08   53.8 
3 2016-09-01 00:01:38   53.8 
4 2016-09-01 00:02:08   53.8 
>>> 

Тогда я начал читать Time Series/Date Functionality section of the docs и, казалось, что было бы легче, если индекс DataFrame был рядом DateTime - Я также заметил, некоторые не последовательное DateTimes в данных, так что я сортируется после установки индекса (есть предупреждения в документации о вышедших из последовательности DateTimes):

df1 = df.set_index('Timestamp') 
df1 = df1.sort_index() 

>>> df1.head() 
        Temperature 
Timestamp      
2016-09-01 00:00:08   53.8 
2016-09-01 00:00:08   54.0 
2016-09-01 00:00:38   53.8 
2016-09-01 00:01:08   53.8 
2016-09-01 00:01:38   53.8 
>>> 

я не слишком далеко вниз по документации (практикующих примеры, как я читал), пока я не наткнулся на способ фильтрации диапазон DATETIME:

>>> df1['2016-09-01 00:01:30' : '2016-09-01 00:03:15'] 
        Temperature 
Timestamp      
2016-09-01 00:01:38   53.8 
2016-09-01 00:02:08   53.8 
2016-09-01 00:02:38   54.1 
2016-09-01 00:03:08   54.1 
>>> 

Это делает его очень легким. Вы можете либо присвоить результат имени затем получить среднее или получить среднее сразу:

>>> z = df1['2016-09-01 00:01:30' : '2016-09-01 00:03:15'] 
>>> z.mean() 
Temperature 53.95 
dtype: float64 
>>> df1['2016-09-01 00:01:30' : '2016-09-01 00:03:15'].mean() 
Temperature 53.95 
dtype: float64 
>>> 

Я перестал читать документы там, потому что это должно быть довольно легко построить даты-строки для любого периода, начиная времени, окончание или окружающие введены вручную даты/время


чтобы быть справедливыми, несколько недель назад я надоела просто stumbilng вокруг, пытаясь сделать Панду делать то, что я хотел, чтобы я смотрел «панду с нулем «Обсуждение Pycon показало на pandas Talks page. Я даже не смотрю на все это, но то, что я действительно поглотил, увеличило мою производительность.

+0

если у меня есть несколько столбцов, то ... как температура 1 и температура 2 ?? –

+0

@NehaB - он все равно должен работать, вы попробовали? – wwii

+0

Я пробовал, но не работал..Если это два столбца, они дают комбинированную Avg для обоих ... Основная проблема заключается в том, что я повторно вытаскиваю свой df, чтобы его время от времени давало мне полное avg..i использую: - df1.resample ('D'). Mean (axis = 1) , давая мне комбинированную Avg для моей колонки. –

Смежные вопросы