2014-09-03 8 views
-1

У меня есть три блока данных панды, которые содержат три типа индекса 15 минут, 1 минута и 15 секунд, я добавил NaN s в dataframes, как он идет дальше, и построил тему на том же рисунке.Как ограничить заполнение NaN в dataframe pandas

График: Graph1

Теперь я хочу, чтобы заменить один из dataframe NaN с, я использовал ffill(), он работал, но мне нужно, чтобы ограничить заполнение NaN, мне не нужно то, что я отметил красным.

Graph2:

Graph2

Мой участок должен выглядеть как это:

NOAA http://www.ndbc.noaa.gov/plot_dart.php?station=23227&uom=M&width=400&height=220&start=20140830000000&end=20140903235959

Dataframes:

http://bayanbox.ir/id/1324113030042053806?download

http://bayanbox.ir/id/774076250887409862?download

http://bayanbox.ir/id/6217190851751601245?download

Источник:

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 
# 1 minutes recorded data 
data = pd.read_csv('1m.csv', parse_dates=True, index_col='time') 
# 15 minutes recorded data 
data2 = pd.read_csv('15m.csv', parse_dates=True, index_col='time') 
# 15 seconds recorded data 
data3 = pd.read_csv('15s.csv', parse_dates=True, index_col='time') 

del data['Unnamed: 0'], data2['Unnamed: 0'], data3['Unnamed: 0'] 

def add_nan(DF, T): 
    start = DF.time[len(DF)-1] 
    stop = DF.time[0] 
    rng = pd.date_range(start, stop, freq=T) 
    DF = DF.drop_duplicates('time').set_index('time').reindex(rng) 
    return DF 

data = pd.DataFrame({"1-min":np.array(data.Height[:]), "time":data.index}) 
data2 = pd.DataFrame({"15-min":np.array(data2.Height[:]), "time":data2.index}) 
data3 = pd.DataFrame({"15-sec":np.array(data3.Height[:]), "time":data3.index}) 

data = add_nan(data, '1min') 
data2 = add_nan(data2, '15min') 
data3 = add_nan(data3, '1S') 

ax = data.plot(color='g', figsize=(10, 6)) 
data2.plot(ax=ax, color='b') 
data3.plot(ax=ax, style='.-r') 

plt.savefig('plot.png') 
+0

Что вы имеете в виду «не показывает должного сюжета»? Если вам не хватает данных (в форме «NaN's», то ничего не будет строить. – Ffisegydd

+0

Что-то не так в dataframe данных «data2», сюжет должен выглядеть как график NOAA, я думаю, что «NaN's больше, чем то, что должен быть – Moradi

ответ

0

Согласно панд documentation, ограничение параметра следует установить True

DataFrame.ffill(axis=0, inplace=False, limit=None, downcast=None) 
Synonym for NDFrame.fillna(method=’ffill’) 

enter image description here

Это функция для добавления NaN данные в dataframe, для предела NaN заполнения limit=True следует установить в dataframe:

def add_nan(DF, T): 
    start = DF.time[len(DF)-1] 
    stop = DF.time[0] 
    rng = pd.date_range(start, stop, freq=T) 
    DF = DF.drop_duplicates('time').set_index('time').reindex(rng) 
    return DF.ffill(limit=True) 
Смежные вопросы