Заполнение данных с помощью .fillNA(), данные взяты из Quandl

Я получил некоторые данные о запасах из Quandl как по ценам на сырую нефть (WTI), так и по цене Caterpillar (CAT). Когда я объединяю два кадра данных вместе, у меня остается несколько NaN. Моя конечная цель - запустить .Pearsonr() для оценки корреляции (вместе с p-значениями), однако я не могу заставить Pearsonr() работать из-за всех Нан. Поэтому я пытаюсь их очистить. Когда я использую функцию .fillNA(), похоже, она не работает. Я даже пробовал .interpolate() и .dropna(). Ни один из них не работает. Вот мой рабочий код.

import Quandl
import pandas as pd
import numpy as np


#WTI Data#
WTI_daily = Quandl.get("DOE/RWTC", collapse="daily",trim_start="1986-10-10", trim_end="1986-10-15")
WTI_daily.columns = ['WTI']

#CAT Data
CAT_daily = Quandl.get("YAHOO/CAT.6", collapse = "daily",trim_start="1986-10-10", trim_end="1986-10-15")
CAT_daily.columns = ['CAT']  

#Combine Data Frames
daily_price_df = pd.concat([CAT_daily, WTI_daily], axis=1)
print daily_price_df

#Verify they are dataFrames:
def really_a_df(var):
    if isinstance(var, pd.DataFrame):
        print "DATAFRAME SUCCESS"
    else:
        print "Wahh Wahh"
    return 'done'

print really_a_df(daily_price_df)

#Fill NAs 
#CAN'T GET THIS TO WORK!!
daily_price_df.fillna(method='pad', limit=8)
print daily_price_df

# Try to interpolate
#CAN'T GET THIS TO WORK!!
daily_price_df.interpolate()
print daily_price_df

#Drop NAs
#CAN'T GET THIS TO WORK!!
daily_price_df.dropna(axis=1)
print daily_price_df

Что бы это ни стоило, мне удалось заставить функцию работать, когда я создаю фрейм данных с нуля, используя этот код:

import pandas as pd
import numpy as np

d = {'a' : 0., 'b' : 1., 'c' : 2.,'d':None,'e':6}
d_series = pd.Series(d, index=['a', 'b', 'c', 'd','e'])
d_df =  pd.DataFrame(d_series)
d_df = d_df.fillna(method='pad')

print d_df

Первоначально я думал, что, возможно, мои данные не были в форме фрейма данных, но я использовал простой тест, чтобы подтвердить, что они на самом деле являются фреймворком данных. Единственный вывод, который остается (на мой взгляд), заключается в том, что это что-то о структуре кадра данных Quandl или, возможно, о природе TimeSeries. Пожалуйста, знайте, что я новичок в python, поэтому структурируйте ответы для новичка/новичка. Любая помощь высоко ценится!


person Justin R. Locke    schedule 17.02.2016    source источник


Ответы (1)


выстрел в горшок - вы только что забыли назначить или использовать флаг на месте.

daily_price_df = daily_price_df.fillna(method='pad', limit=8)
OR
daily_price_df.fillna(method='pad', limit=8, inplace=True)
person Dickster    schedule 17.02.2016
comment
Вау, такой простой ответ. Спасибо!! Мне интересно, почему .fillNA работал в другом примере, который я предоставил, где у меня не было inplace = True? - person Justin R. Locke; 17.02.2016
comment
ха! - Поверь мне, я усвоил это на собственном горьком опыте. Причина, по которой это сработало, заключается в том, что вы назначили возврат метода fillna() вашему фрейму данных. например df = df.fillna(), тогда вам не нужно inplace=True, но если вы просто вызываете метод и не назначаете возврат переменной, тогда он оценивается, но возврат теряется в эфире. Вот когда вы хотите использовать флаг inplace=True - person Dickster; 17.02.2016