附加一个循环的数据框

早上,

我有3个擅长,我通过从Excel导入。 我正在尝试创build一个从每个导入名称('Ticker')列的DataFrame,添加Excel('Secto')的标题,并将其附加到eachother以创build一个新的DataFrame。 这个新的DataFrame将被导出到Excel。

AA = ['Aero&Def','REITs', 'Auto&Parts'] File = 'FTSEASX_'+AA[0]+'_Price.xlsx' xlsx = pd.ExcelFile('C:/Users/Ben/'+File) df = pd.read_excel(xlsx, 'Price_Data') df = df[df.Identifier.notnull()] df.fillna(0) a = [] b = [] for i in df['Ticker']: a.append(i) b.append(AA[0]) raw_data = {'Ticker': a, 'Sector': b} df2 = pd.DataFrame(raw_data, columns = ['Ticker', 'Sector']) del AA[0] for j in AA: File = 'FTSEASX_'+j+'_Price.xlsx' xlsx = pd.ExcelFile('C:/Users/Ben/'+File) df3 = pd.read_excel(xlsx, 'Price_Data') df3 = df3[df3.Identifier.notnull()] df3.fillna(0) a = [] b = [] for i in df3['Ticker']: a.append(i) b.append(j) raw_data = {'Ticker': a, 'Sector': b} df4 = pd.DataFrame(raw_data, columns = ['Ticker', 'Sector']) df5 = df2.append(df4) 

我目前正在下面,但显然是第二次import,名为“房地产投资信托”没有被捕获。

 Ticker Sector 0 AVON-GB Aero&Def 1 BA-GB Aero&Def 2 COB-GB Aero&Def 3 MGGT-GB Aero&Def 4 SNR-GB Aero&Def 5 ULE-GB Aero&Def 6 QQ-GB Aero&Def 7 RR-GB Aero&Def 8 CHG-GB Aero&Def 0 GKN-GB Auto&Parts 

我将如何去实现这一目标? 还是有更好的pythonic方式来实现呢?

我会这样做:

 import pandas as pd AA = ['Aero&Def','REITs', 'Auto&Parts'] # assuming that ['Ticker','Sector','Identifier'] columns are in 'B,D,E' Excel columns xl_cols='B,D,E' dfs = [ pd.read_excel('FTSEASX_{0}_Price.xlsx'.format(f), 'Price_Data', parse_cols=xl_cols, ).query('Identifier == Identifier') for f in AA] df = pd.concat(dfs, ignore_index=True) print(df[['Ticker', 'Sector']]) 

说明:

.query('Identifier == Identifier') – 仅给出那些Identifier不为空的行(使用value == NaN将始终为False

PS在使用pandas时,您不想循环使用dataframe…