Несколько полей с использованием Pandas и Quandl

Я использую Quandl для загрузки ежедневных цен NAV для определенного набора схем взаимных фондов. Однако он возвращает объект данных вместо возврата конкретного значения.

import quandl
import pandas as pd

quandl.ApiConfig.api_key = <Quandl Key>

list2 = [102505, 129221, 102142, 103197, 100614, 100474, 102913, 102921]

def get_nav(mf_code):
    df_main=pd.DataFrame()
    code=str(mf_code)
    df_main=quandl.get("AMFI/"+code,start_date='2019-04-05',end_date='2019-04- 05')
    return (df_main['Net Asset Value'])


for each in list2:
    mf_code=each
    nav = get_nav(mf_code)
    print (nav)

Вывод для приведенного выше кода:

Date
2019-04-05    29.8916
Name: Net Asset Value, dtype: float64
Date
2019-04-05    19.354
Name: Net Asset Value, dtype: float64

тогда как,

Я хочу извлечь только значения, т.е. 29,8916, 19,354 и т. д.

Обновленный код:

def get_nav(mf_code):
    nav1=[]
    df_main=pd.DataFrame()
    code=str(mf_code)
#    try:
    df_main=quandl.get("AMFI/"+code,start_date='2019-04-05',end_date='2019-04-05')
    nav_value=df_main['Net Asset Value']
    if not nav_value.empty:
        nav1=nav_value[0]
        print(nav1)
#   print(df_main.head())
#    except IndexError:
#        nav_value=0
    return (nav1)


#Use merged sheet for work
df_port=pd.read_excel(fp_out)
df_port['Current Price']=df_port['Scheme_Code'].apply(lambda x:get_nav(x))

print(df_port['Current Price'].head())
df_port.to_excel(fp_out2)

person Viraj Desai    schedule 08.04.2019    source источник


Ответы (1)


По умолчанию quandl Time-series API возвращает вам кадр данных с датой в качестве индекса, даже если есть только одна строка.

Если вам нужно только значение первой строки, вы можете использовать iloc:

if not nav.empty:
    print (nav.iloc[0])

или просто целочисленное индексирование:

if not nav.empty:
    print (nav[0])
person Aditya Santoso    schedule 09.04.2019
comment
IndexError: одиночный позиционный индексатор выходит за пределы Я получаю эту ошибку, из-за которой не удается напечатать последнее значение в списке. Не могу уложиться в голове. - person Viraj Desai; 12.04.2019
comment
Вы проверяли наличие пустого фрейма данных, как в моем ответе? Если кадр данных не пуст, .iloc[0] не должен терпеть неудачу... - person Aditya Santoso; 13.04.2019
comment
Обновлен код, вставленный выше. Я использую .empty, однако последнее значение списка дает мне «[]» на листе Excel, который я генерирую (указывая, что это не решает проблему полностью) - person Viraj Desai; 13.04.2019
comment
Довольно удивительно, но API каким-то образом возвращает пустой фрейм данных для соответствующего кода схемы, что, по-видимому, связано с качеством данных и никак не связано с кодом! Спасибо за вашу помощь! PS: Если вы хотите проверить это - код схемы: 141143 - person Viraj Desai; 13.04.2019