Конкатенация Python с двумя вкладками электронных таблиц - PullRequest
0 голосов
/ 30 сентября 2019

Мне нужно обновить существующий скрипт конкатенации Python Pandas, который в настоящее время объединяет более 30 электронных таблиц MS Excel, используя карту столбцов (словарь). В настоящее время сценарий объединяется, используя только одну вкладку, которая названа в операторе pd.read_excel. Мне нужно держать карту столбцов в такте и вносить один дополнительный столбец из другой вкладки в общую конкатенацию, поэтому я думаю, что мне нужно будет проанализировать листы в кадре данных. Я понимаю, что это, вероятно, просто, но все еще тянет меня за волосы. Имя существующей вкладки Excel - «Сведения об уровне ссуды», и мне нужно перенести другой столбец (Дата выплаты) из другой вкладки (S214 Ежедневные выплаты). Текущий код размещен ниже. Заранее благодарим за любую помощь, которую вы можете предложить.


import os, pandas as pd

os.chdir(r'M:\Operations\ABC Database\Accounting FMV Recon\Monthly Report Templates Input\Servicer Reports\201908\XYZ')
df_list = []

col_map = {'XYZ Msp Bank': 'XYZMspBank',
           'XYZ Loan No' : 'XYZLoanNo',
           'Prior Loan' : 'AOLoanNo',
           'Borrowers Name' : 'BorrName',
           'MBA Delinquency Status' : 'MBADelqStatus',
           'Note Prin' : 'NotePrincipal',
           'Interest Rate' : 'IntRate',
           'Current P&I' : 'CurrentPI',
           'Beginning UPB' : 'BegUPB',
           'Ending UPB' : 'EndUPB',
           'Ending Deferred Principal' : 'EndDefPrincipal',
           'Boarded Principal' : 'BoardedPrincipal',
           'UPB Transfer In' : 'UPBTransferIn',
           'UPB Transfer Out' : 'UPBTransferOut',
           'Non-Monetary Adjustments' : 'NonMonetaryAdj',
           'Next Payment' : 'NextPayment',
           'S215 Principal Collected' : 'S215PrinCollected',
           'S215 Interest Collected' : 'S215IntCollected',
           'S213 Curtailment Collected' : 'S213CurtCollected',
           'S214 PIF Principal Collected' : 'S214PIFPrinCollected',
           'S214 PIF Servicing Fee Collected' : 'S214PIFServicingFeeCollected',
           'S214 PIF Interest Collected' : 'S214PIFIntCollected',
           'S214 PIF Prepmt Penalty Collected' : 'S214PIFPrepmtPenaltyCollected',
           'S214 Daily Payoffs (Non Securitized)' : 'S214DailyPayoffsNonSec',
           'S214 Daily Payoffs (Securitized)' : 'S214DailyPayoffsSec',
           'Total Remittance' : 'TotalRemittance'
           }

for f in os.listdir():

    temp = pd.read_excel(f, sheet_name='Loan Level Detail')
    temp = temp[temp['ZYZ Loan No'].notnull()]
    temp = temp[col_map.keys()]
    temp.rename(columns=col_map, inplace=True)
    temp['SourceFile'] = f
    df_list.append(temp)

df = pd.concat(df_list, ignore_index=True)
df.drop_duplicates(inplace=True)
df['ReportDate'] = 201908
df.to_excel(r'M:\Operations\ABC Database\Accounting FMV Recon\Monthly Report Templates Output\Servicer Reports\XYZ Concatenated 201908.xlsx', index=False)

1 Ответ

0 голосов
/ 30 сентября 2019

Примерно в непроверенном псевдокоде (потому что у вас нет данных для репликации) ...

Внутри цикла

# existing code
temp = pd.read_excel(f, sheet_name='Loan Level Detail')
temp = temp[temp['ZYZ Loan No'].notnull()]
temp = temp[col_map.keys()]
temp.rename(columns=col_map, inplace=True)
temp['SourceFile'] = f

# Following the same approach for a second sheet
col_map2 = {
       'XYZ Loan No' : 'XYZLoanNo',
       'Payoff Date' : 'PayoffDate'}
temp2 = pd.read_excel(f, sheet_name='S214 Daily Payoffs')
temp2 = temp2[temp2['ZYZ Loan No'].notnull()]
temp2 = temp2[col_map2.keys]
temp2.rename(columns=col_map2, inplace=True)


# assume that 'ZYZ Loan No' appears in both sheets, so join
temp3 = temp.merge(temp2, how='left', on='ZYZ Loan No')

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