манипулирование списком панд и заполнение NA - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь использовать эту функцию для извлечения значения AdjClose из кадра данных.

def get_sell_price(data):
    buy_date = get_buy_date(data)
    sell_date = get_sell_date(buy_date)
    l=[]
    for i in range(0,len(buy_date)):
        sell_price = data[(data.Date == sell_date[i])].AdjClose
        l.append(sell_price)
    return l

Это возвращает данные:

[8180    110.459999
 Name: AdjClose, dtype: float64, 17052    655.679993
 Name: AdjClose, dtype: float64, 17452    968.099976
 Name: AdjClose, dtype: float64, 17453    970.280029
 Name: AdjClose, dtype: float64, 17454    965.719971
 Name: AdjClose, dtype: float64, 17455    955.25
 Name: AdjClose, dtype: float64, 17458    944.159973
 Name: AdjClose, dtype: float64, 17462    950.690002
 Name: AdjClose, dtype: float64, 17470    914.619995
 Name: AdjClose, dtype: float64, 17497    951.640015
 Name: AdjClose, dtype: float64, 17536    977.070007
 Name: AdjClose, dtype: float64, 17537    966.580017
 Name: AdjClose, dtype: float64, 17538    964.0
 Name: AdjClose, dtype: float64, 18180    1335.209961
 Name: AdjClose, dtype: float64, 18181    1313.040039
 Name: AdjClose, dtype: float64, 18182    1285.550049
 Name: AdjClose, dtype: float64, 21116    1514.400024
 Name: AdjClose, dtype: float64, 21424    1300.680054
 Name: AdjClose, dtype: float64, 22006    1178.099976
 Name: AdjClose, dtype: float64, 22016    1196.47998
 Name: AdjClose, dtype: float64, 22017    1197.300049
 Name: AdjClose, dtype: float64, 22018    1210.650024
 Name: AdjClose, dtype: float64, 22537    1209.109985
 Name: AdjClose, dtype: float64, 25106    2914.0
 Name: AdjClose, dtype: float64, 25113    2901.610107
 Name: AdjClose, dtype: float64, 25114    2885.570068
 Name: AdjClose, dtype: float64, 25116    2885.570068
 Name: AdjClose, dtype: float64, 25117    2884.429932
 Name: AdjClose, dtype: float64, 25118    2880.340088
 Name: AdjClose, dtype: float64, 25119    2785.679932
 Name: AdjClose, dtype: float64, 25122    2767.129883
 Name: AdjClose, dtype: float64, 25129    2767.780029
 Name: AdjClose, dtype: float64, 25143    2723.060059
 Name: AdjClose, dtype: float64, 25144    2723.060059
 Name: AdjClose, dtype: float64, 25157    2736.27002
 Name: AdjClose, dtype: float64, 25158    2736.27002
 Name: AdjClose, dtype: float64, 25169    2737.800049
 Name: AdjClose, dtype: float64, 25219    2670.709961
 Name: AdjClose, dtype: float64, 25240    2707.879883
 Name: AdjClose, dtype: float64, Series([], Name: AdjClose, dtype: float64), Series([], Name: AdjClose, dtype: float64)]

Я бы предпочел изменитьв следующей строке

sell_price = data[(data.Date == sell_date[i])].AdjClose

до

sell_price = data[(data.Date == sell_date[i])].AdjClose.values[0]

, чтобы я мог получить список значений только с вложенными пояснениями.

Однако последние 2 элемента всписок пуст, поэтому при попытке извлечь значение вызывает ошибку.Это потому, что 2 из sell_date в кадре данных относятся к 2020 году, поэтому у него нет данных для возврата, что приводит к ошибке индекса.

Я попытался отфильтровать sell_date <2019-2-28 какэто количество данных, которые у меня есть.Но это не работает, так как вся эта таблица должна иметь 41 строку. </p>

Можно ли как-нибудь вернуть значения с 0 в этой функции, используя

sell_price = data[(data.Date == sell_date[i])].AdjClose.values[0]

Я ценю ваш опыт ипонимание!

1 Ответ

1 голос
/ 06 марта 2019

Вы можете использовать next с iter для первого значения, если оно существует, иначе возвращается значение по умолчанию (здесь NaN).

Лучше использовать для выбора столбца с фильтром DataFrame.loc:

sell_price = next(iter(data.loc[(data.Date == sell_date[i]), 'AdjClose']), np.nan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...