2016-08-10 8 views
1

У меня есть dataframe называется df1передискретизации dataframe с пандами

import numpy as np 
import matplotlib.pylab as plt 
import matplotlib.dates as mdates 
from matplotlib import style 
import pandas as pd 
%pylab inline 
import seaborn as sns 
sns.set_style('darkgrid') 
import io 
style.use('ggplot') 
from datetime import datetime 
import time  

df1 = pd.read_csv('C:/Users/Demonstrator/Downloads/Listeequipement.csv',delimiter=';', parse_dates=[0], infer_datetime_format = True) 
df1.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 17 entries, 145 to 161 
Data columns (total 6 columns): 
TIMESTAMP     17 non-null datetime64[ns] 
ACT_TIME_AERATEUR_1_F1 17 non-null float64 
ACT_TIME_AERATEUR_1_F3 17 non-null float64 
ACT_TIME_AERATEUR_1_F5 17 non-null float64 
ACT_TIME_AERATEUR_1_F6 17 non-null float64 
ACT_TIME_AERATEUR_1_F7 17 non-null float64 
dtypes: datetime64[ns](1), float64(5) 
memory usage: 952.0 bytes 

# build HeatMap 
df1['TIMESTAMP']= pd.to_datetime(df_no_missing['TIMESTAMP'], '%d-%m-%y %H:%M:%S') 
df1['date'] = df_no_missing['TIMESTAMP'].dt.date 
df1['time'] = df_no_missing['TIMESTAMP'].dt.time 
date_debut = pd.to_datetime('2015-08-01 23:10:00') 
date_fin = pd.to_datetime('2015-08-02 02:00:00') 

df1 = df1[(df1['TIMESTAMP'] >= date_debut) & (df1['TIMESTAMP'] < date_fin)] 
sns.heatmap(df1.iloc[:,1:6:],annot=True, linewidths=.5) 
ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5) 
ax.set_yticklabels([i.strftime("%Y-%m-%d %H:%M:%S") for i in df1.TIMESTAMP], rotation=0) 

Это походит на это:

TIMESTAMP;ACT_TIME_AERATEUR_1_F1;ACT_TIME_AERATEUR_1_F3;ACT_TIME_AERATEUR_1_F5;ACT_TIME_AERATEUR_1_F6;ACT_TIME_AERATEUR_1_F7 
2015-07-31 23:00:00;90;90;90;90;90 
2015-07-31 23:10:00;0;0;0;0;0 
2015-07-31 23:20:00;0;0;0;0;0 
2015-07-31 23:30:00;0;0;0;0;0 
2015-07-31 23:40:00;0;0;0;0;0 

Я стараюсь ресэмплировать его иметь за каждые 30 минут (временной метки) среднее значение значения ACT_TIME_AERATEUR_1_F1;ACT_TIME_AERATEUR_1_F3;ACT_TIME_AERATEUR_1_F5;ACT_TIME_AERATEUR_1_F6;ACT_TIME_AERATEUR_1_F7.

Я пытаюсь сделать так:

df1.index = pd.to_datetime(df1.index) 
print(df1.resample('30min').mean()) 

Но я получаю что-то странное:

  ACT_TIME_AERATEUR_1_F1 ACT_TIME_AERATEUR_1_F3 \ 
1970-01-01    40.588235    40.588235 

      ACT_TIME_AERATEUR_1_F5 ACT_TIME_AERATEUR_1_F6 \ 
1970-01-01    40.588235    40.588235 

      ACT_TIME_AERATEUR_1_F7 
1970-01-01    40.588235 

у меня нет этих дат 1970-01-01 вообще.

Любая идея, пожалуйста, помогите мне, как она импортирует 1970 год?

+1

Как выглядит 'df1.index' перед повторной выборкой, но после преобразования с использованием' to_datetime'? – EdChum

+0

, прежде чем я это сделал: sns.heatmap (df1.iloc [:, 1: 6:], annot = True, ширина линий = .5) ax = sns.heatmap (df1.iloc [:, 1: 6:], annot = True, ширина линий = .5) ax.set_yticklabels ([%.% (% Y%% -% d% H:% M:% S ") для i в df1.TIMESTAMP], вращение = 0) для получения HeatMap – Bio

+2

TIMESTAMP должен быть индексом dataframe - я подозреваю, что у вас есть что-то еще. – mdurant

ответ

0

Он подбирает индекс целых чисел по умолчанию и, следовательно, вы получаете эти странные значения, когда вы выполняете pd.to_datetime этих индексов. Вам нужно установить TIMESTAMP в качестве индекса.

In [2]: df1 = df1.set_index('TIMESTAMP') 

In [3]: df1.resample('30min').mean() 
Out[3]: 
        ACT_TIME_AERATEUR_1_F1 ACT_TIME_AERATEUR_1_F3 \ 
TIMESTAMP                
2015-07-31 23:00:00      30      30 
2015-07-31 23:30:00      0      0 

        ACT_TIME_AERATEUR_1_F5 ACT_TIME_AERATEUR_1_F6 \ 
TIMESTAMP                
2015-07-31 23:00:00      30      30 
2015-07-31 23:30:00      0      0 

        ACT_TIME_AERATEUR_1_F7 
TIMESTAMP          
2015-07-31 23:00:00      30 
2015-07-31 23:30:00      0 
+1

Он работает! Большое спасибо – Bio

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