2017-09-06 48 views
4

我有大約50個Excel文件&我想導入到數據框併合並所有文件到單個數據框。 但有些文件有3個一些是4列。每個文件按不同順序排列成不同的列。從所有文件匹配列和追加到數據框,Python 3.6

總截然不同柱:5即COL1,COL2,COL3,COL4,COL5

我知道如何導入,但同時面臨着追加發行。

腳本:

dfAll = pd.DataFrame(columns=['col1', 'col2', 'col3', 'col4', 'col5')] 
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e col1, col2, col5 
columnsOFdf = df.columns 
dfAll[columnsOFdf] = dfAll.append(df) 

但它給錯誤 「ValueError異常:列必須是相同長度的關鍵」

我要追加DF [ 'COL1', 'COL2', 'COL5' ] data to dfAll ['col1','col2','col5']

請幫忙解決這個問題。

+2

您試圖將大小爲3的數據框添加到大小爲5的數據框,這不適用於untype數據集 – Sentinel

+0

@Sentinel,感謝您的答覆,任何備用解決方案? –

+0

我沒有很好的引用python的dataFrames,你很可能需要創建一個新的數據框,只包括你想要的列,而不是附加其他數據框 – Sentinel

回答

2

級聯會符合您的列

dfs = [] 
files = [...] 
for file_name in files: 
    dfs.append(pd.read_excel(file_name, sheetname='data1')) 
df = pd.concat(dfs) 

df1 = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC')) 
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list('BCD')) 
>>> pd.concat([df1, df2]) 
      A   B   C   D 
0 -2.329280 0.644155 -0.835137  NaN 
1 0.666496 -1.299048 0.111579  NaN 
2 1.855494 -0.085850 -0.541890  NaN 
0  NaN -1.131514 1.023610 -0.514384 
1  NaN 0.670063 1.403143 -0.978611 
2  NaN -0.314741 -0.727200 -0.620511 

此外,每次將數據幀添加到現有的一個時間,它返回一個副本。這會嚴重降低性能並被稱爲二次副本。您最好創建所有數據框的列表,然後連接結果。

+0

感謝大量的工作好... –

1

一種解決方案是空列添加到您的Excel文件加載dataframes:

columns = ['col1', 'col2', 'col3', 'col4', 'col5'] 
dfAll = pd.DataFrame(columns=columns) 
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e    col1, col2, col5 
columnsOFdf = df.columns 
for column in columns: 
    if column not in columnsOFdf: 
     df[column] = [""] * df.shape[0] 
dfAll.append(df) 
+3

這是一個很好的解決方法,如果你需要保留額外的新數據列。也許一個佔位符,而不是一個空的空間將是一個好主意。但如果數據不是必需的,我會建議創建一個新的數據框 – Sentinel

+0

@Sentinel,將對此工作......謝謝 –

1

試試這個:

[dfAll.append(i) for i in df] 

我希望這可以幫助您。

+0

錯誤:TypeError:無法連接非NDFrame對象 –

+0

type(dfAll)>>,鍵入(df)>>