2015-07-23 2 views
2

У меня есть файл Excel с двумя листами, и я пытаюсь прочитать их оба в виде данных, как в приведенном ниже коде. Тем не менее, я получаю ошибкуKeyError при чтении из данных Excel в dataframe

KeyError: "['months_to_maturity' 'asset_id' 'orig_iss_dt' 'maturity_dt' 'pay_freq_cd'\n 'coupon' 'closing_price'] not in index" 

в линии

return df[['months_to_maturity', 'asset_id', 'orig_iss_dt', 'maturity_dt' , 'pay_freq_cd', 'coupon', 'closing_price']] 

в функции SecondExcelFileReader(). Тем не менее, оба листа имеют заголовки

asset_id orig_iss_dt maturity_dt pay_freq_cd coupon closing_price months_to_maturity 

Я возвращаюсь df следующим образом, как это порядок, в котором я хочу, чтобы столбцы.

def ExcelFileReader(): 
    xls = pd.ExcelFile('D:/USDataRECENTLY.xls') 
    df = xls.parse(xls.sheet_names[0]) 
    return df[['months_to_maturity', 'asset_id', 'orig_iss_dt', 'maturity_dt' , 'pay_freq_cd', 'coupon', 'closing_price']] 


def SecondExcelFileReader(): 
    xls = pd.ExcelFile('D:/USDataRECENTLY.xls') 
    df = xls.parse(xls.sheet_names[1]) 
    return df[['months_to_maturity', 'asset_id', 'orig_iss_dt', 'maturity_dt' , 'pay_freq_cd', 'coupon', 'closing_price']] 

def mergingdataframes(): 
    df1 = ExcelFileReader() 
    df2 = SecondExcelFileReader() 
    return pd.concat([df1, df2]) 

Edit: Этот файл Excel был экспортирован из Sybase Oracle SQL Developer и, следовательно, первый лист пришел уже с названиями. Я просто скопировал и вставил второй лист с теми же заголовками. Кроме того, у меня есть проблема со вторым листом.

Лист 1: Sheet 1

Лист 2: Sheet 2

+0

Вы не получите вопрос на первом листе? –

+0

@AnandSKumar У меня нет проблемы с первым листом. Мне нужно объяснить, что этот файл Excel был экспортирован из Sybase Oracle SQL Developer, и, следовательно, первый лист уже появился с названиями. Я только что скопировал и вставил второй лист с названиями. – user131983

+0

Можете ли вы показать второй лист и первый лист (может быть, скриншот)? –

ответ

1
def ExcelFileReader(): 
    xls = pd.ExcelFile('D:/USDataRECENTLY.xls') 
    sheet_num = xls.sheet_names.index(xls.sheet_names[0]) 
    df = pd.read_excel('D:/USDataRECENTLY.xls',sheetname=sheet_num) 
    return df[['months_to_maturity', 'asset_id', 'orig_iss_dt', 'maturity_dt' ,'pay_freq_cd', 'coupon', 'closing_price']] 

В качестве альтернативы в этом случае вместо sheetname = xls.sheet_names[0] вы могли бы использовать sheetname=0

Похоже, ваша проблема в том, что ваш второй SheetName является «Sheet1» и на основе документации ExcelParser «Sheet1» означает первый лист, но в вашем случае это второй лист. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.ExcelFile.parse.html

Лучше реализация будет:

def mergingdataframes(): 
    mergedf= pd.concat(pd.read_excel('D:/USDataRECENTLY.xls', sheetname=[0,1])) 
    mergedf.index = mergedf.index.droplevel(0)# need this to drop dict keys 
    return mergedf 
Смежные вопросы