2016-03-02 137 views
1

我正在解析excel文件中的數據,並且生成的DataFrame的列可能或可能不與我想要堆疊幾個解析的DataFrame的基址DataFrame對齊。連接具有不同列排序的數據幀

讓我們打電話DataFrame我從數據A和基地DataFramedf_A解析。

我讀導致A=

Index     AGUB AGUG MUEB MUEB SIL SIL SILB SILB 
2012-01-01 00:00:00  0.00  0 0.00 50.78 0.00 0.00 0.00 0.00 
2012-01-01 01:00:00  0.00  0 0.00 53.15 0.00 53.15 0.00 0.00 
2012-01-01 02:00:00  0.00  0 0.00 0.00 53.15 53.15 53.15 53.15 
2012-01-01 03:00:00  0.00  0 0.00 0.00 0.00 55.16 0.00 0.00 
2012-01-01 04:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 05:00:00  48.96  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 06:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 07:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 08:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 09:00:00  52.28  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 10:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 11:00:00  36.93  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 12:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 13:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 50.00 
2012-01-01 14:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 34.01 
2012-01-01 15:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 16:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 17:00:00  53.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 18:00:00  0.00 75 0.00 75.00 0.00 75.00 0.00 0.00 
2012-01-01 19:00:00  0.00 70 0.00 70.00 0.00 0.00 0.00 0.00 
2012-01-01 20:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 21:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 22:00:00  0.00  0 0.00 0.00 0.00 0.00 0.00 0.00 
2012-01-01 23:00:00  0.00  0 53.45 53.45 0.00 0.00 0.00 0.00 

我創建基礎數據幀的Excel玉樹:

units = ['MUE', 'MUEB', 'SIL', 'SILB', 'AGUG', 'AGUB', 'MUEBP', 'MUELP'] 
df_A = pd.DataFrame(columns=units) 
df_A = pd.concat([df_A, A], axis=0) 
concat如果 A有超過 df_A少列應該沒事

一般,但在這種情況下,唯一的區別是訂單。拼接導致以下錯誤:

ValueError: Plan shapes are not aligned

我想知道如何與df_A給出列的順序將兩者連接起來dataframes。

回答

3

我已經嘗試過,無論源或目標定義的DataFrame中是否有更多列 - 無論哪種方式,結果都是由所有提供的列的聯合組成的數據幀(在目標中指定了空列,但未填充源代碼填充爲NaN)。

我能夠重現您的錯誤的地方在於源或目標數據框中的列名包含重複的名稱。

在您的示例中,各個列在您的源文件中多次出現。我不認爲concat可以很好地處理這些重複的列。

import pandas as pd 
s1 = [0,1,2,3,4,5] 
s2 = [0,0,0,0,1,1] 
A = pd.DataFrame([s2,s1],columns=['A','B','C','D','E','F']) 

,導致:

 
A B C D E F 
----------- 
0 0 0 0 1 1 
0 1 2 3 4 5 

以列的子集,並使用它們來創建一個稱爲B

B = A[['A','C','E']] 
 

A C E 
----- 
0 0 1 
0 2 4 

新的數據幀創建一個新的空的目標數據框

col_names = ['D','A','C','B'] 
Z = pd.DataFrame(columns=col_names) 
 
D A C B 
------- 

而將兩者連接起來:

Z = pd.concat([B,Z],axis=0) 
 
A C D E 
0 0 NaN 1 
0 2 NaN 4 

工作正常!

但是,如果我重新使用列作爲這樣的空數據框:

col_names = ['D','A','C','D'] 
Z = pd.DataFrame(columns=col_names) 
 
    D A C D 

並嘗試以連接:

col_names = ['D','A','C','D'] 
Z = pd.DataFrame(columns=col_names) 

然後我讓你描述的錯誤。

相關問題