Инициализация панелей данных pandas с индексом и без него приводит к различным результатам - PullRequest
2 голосов
/ 24 февраля 2012

Если я использую следующую методологию для построения pandas.DataFrame, я получаю вывод, который (я думаю) является своеобразным:

import pandas, numpy

df = pandas.DataFrame(
    numpy.random.rand(100,2), index = numpy.arange(100), columns = ['s1','s2'])
smoothed = pandas.DataFrame(
    pandas.ewma(df, span = 21), index = df.index, columns = ['smooth1','smooth2'])

Когда я смотрю на сглаженные значения, я получаю:

>>> smoothed.tail()
smooth1  smooth2
95      NaN      NaN
96      NaN      NaN
97      NaN      NaN
98      NaN      NaN
99      NaN      NaN

Это похоже на агрегацию следующих фрагментированных вызовов, которые дают разные результаты:

smoothed2 = pandas.DataFrame(pandas.ewma(df, span = 21))
smoothed2.index = df.index
smoothed2.columns = ['smooth1','smooth2']

Снова используя вызов DataFrame.tail(), который я получаю:

>>> smoothed2.tail()
smooth1   smooth2
95  0.496021  0.501153 
96  0.506118  0.507541
97  0.516655  0.544621
98  0.520212  0.543751
99  0.518170  0.572429

Может кто-нибудь дать обоснование того, почему эти методологии построения DataFrame должны быть разными?

1 Ответ

5 голосов
/ 24 февраля 2012

Результат ewma(df, span=21) уже является DataFrame, поэтому, когда вы передаете его конструктору DataFrame вместе со списком столбцов, он «выбирает» переданные вами столбцы. В данном конкретном случае сложно разорвать связь между меткой и данными. Если вы сделали вместо этого:

In [23]: smoothed = DataFrame(ewma(df, span = 21).values, index=df.index, columns = ['smooth1','smooth2'])
In [24]: smoothed.head()
Out[24]: 
    smooth1   smooth2
0  0.218350  0.877693
1  0.400214  0.813499
2  0.308564  0.739426
3  0.433341  0.641891
4  0.525260  0.620541

это не проблема. конечно

smoothed = ewma(df, span=21)
smoothed.columns = ['smooth1', 'smooth2']

тоже прекрасно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...