2014-01-10 1 views
1

У меня есть CSV-файл, который выглядит следующим образом:как интерполировать данные в файле csv со скользящим/скользящим средним? (Python)

2000-10-01,0.2214 
2000-10-02,0.18304 
2000-10-03,0.20181 
2000-10-04,0.19469 
2000-10-05, 
2000-10-06, 
2000-10-07,0.11495 
2000-10-08,0.23528 
2000-10-09,0.16796 

, но в некоторые дни значения отсутствуют, иногда только один день, иногда несколько недель без каких-либо значений. есть ли возможность интерполировать или заполнить пробелы скользящим или скользящим средним, возможно, за 15 дней до и после пропущенной даты? мой текущий код:

import pandas as pd 
ts=pd.read_csv('sum.csv', parse_dates=[0], index_col=[0]) 
ts_inter=ts.fillna(pd.stats.moments.rolling_mean(ts,7)) 
ts_inter.to_csv('moving_average_ET.csv') 

Проблема заключается в том, что нет никакого зазора заполняется в выходном файле. Это то же самое, что и исходные данные.

+0

введите значения NA в dataframe: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html#pandas.DataFrame.fillna read dataframe из файла csv: http: // pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html#pandas.io.parsers.read_csv – lowtech

+0

Я бы рекомендовал установить ['pandas'] (http: //pandas.pydata .org). Возможны многие виды интерполяции и вменения. – DSM

+0

Да, я использую панды. И я знаю, что есть функция «roll_mean» и что я могу заполнить NA. Но я не знаю, как его объединить:/ –

ответ

2

IIUC, вы ищете что-то вроде

df.fillna(pd.rolling_mean(df, 7, min_periods=1).shift(-3)) 

Пример:

>>> df 
        1 
0     
2000-10-01 0.22140 
2000-10-02 0.18304 
2000-10-03 0.20181 
2000-10-04 0.19469 
2000-10-05  NaN 
2000-10-06  NaN 
2000-10-07 0.11495 
2000-10-08 0.23528 
2000-10-09 0.16796 

[9 rows x 1 columns] 
>>> df = df.fillna(pd.rolling_mean(df, 7, min_periods=1).shift(-3)) 
>>> df 
        1 
0     
2000-10-01 0.221400 
2000-10-02 0.183040 
2000-10-03 0.201810 
2000-10-04 0.194690 
2000-10-05 0.185954 
2000-10-06 0.182938 
2000-10-07 0.114950 
2000-10-08 0.235280 
2000-10-09 0.167960 

[9 rows x 1 columns] 

, который, кажется, соответствует число описанных в вашем комментарии. Я думаю, что что-то происходит с вашим кодом, так это то, что ваш rolling_mean не производит никаких значений, отличных от NaN, потому что он никогда не думает, что у него достаточно данных для оценки.

+0

Не могли бы вы объяснить, почему вы использовали 'shift (-3)' здесь? Я искал «shift» и использовался в 'timeseries'. Тем не менее, я до сих пор не понял, почему «shift» использовался здесь. Благодаря! –

+0

@ i.n.n.m - Здесь используется старый 'pd.rolling_mean()', где 'roll(). Mean()' - новый формат. «Сдвиг (-3)» перемещает его из правой оконной задачи в центрированное окно. Это также может быть выполнено путем использования 'df.rolling (window = 7, min_periods = 1, center = True) .mean()' –

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

  • Нет связанных вопросов^_^