2017-04-24 97 views
1

我有6個不同的數據框,我想追加一個接一個。操縱2個以上的數據幀

我發現這樣做的唯一方法是每次追加2次,但我相信必須有一種更有效的方法來做到這一點。

我也期待着改變索引和標題名稱,我也知道如何逐一完成,但我也相信還必須有一種有效的方法來做到這一點。

我面臨的最後一個問題是如何設置一個索引與NaN列,我應該如何引用它以便set_index?

df1 

         NaN     1      2      3 
        1   A   17.03   13.41  19.61 
        7   B   3.42    1.51    5.44 
        8   C   5.65    2.81    1.89 
df2 
         NaN     1      2      3 
        1  J   1.60   2.65   1.44 
        5  H   26.78  27.04  21.06 
df3 
         NaN    1      2      3 
        1   L   1.20   1.41   2.04 
        2   M   1.23   1.72   2.47 
        4   R  66.13  51.49  16.62 
        5   F     --  46.89  22.35 
df4 
         NaN    1      2      3 
        1   A   17.03   13.41  19.61 
        7   B   3.42    1.51    5.44 
        8   C   5.65    2.81    1.89 
df5 
         NaN    1      2      3 
        1  J   1.60   2.65   1.44 
        5  H   26.78  27.04  21.06 
df6 
         NaN    1      2      3 
        1   L   1.20   1.41   2.04 
        2   M   1.23   1.72   2.47 
        4   R  66.13  51.49  16.62 
        5   F     --  46.89  22.35 

回答

1

您可以使用concat,對於選擇NaN列可以使用df.columns[0]set_indexlist comprehension

dfs = [df1,df2, df3, ...] 
df = pd.concat([df.set_index(df.columns[0], append=True) for df in dfs]) 
print (df) 
      1  2  3 
    NaN      
1 A 17.03 13.41 19.61 
7 B  3.42 1.51 5.44 
8 C  5.65 2.81 1.89 
1 J  1.6 2.65 1.44 
5 H 26.78 27.04 21.06 
1 L  1.20 1.41 2.04 
2 M  1.23 1.72 2.47 
4 R 66.13 51.49 16.62 
5 F  -- 46.89 22.35 

編輯:

看來NaN值可以是字符串:

print (df3.columns) 
Index(['NaN', '1', '2', '3'], dtype='object') 

dfs = [df1,df2, df3] 
df = pd.concat([df.set_index('NaN', append=True) for df in dfs]) 
print (df) 
      1  2  3 
    NaN      
1 A 17.03 13.41 19.61 
7 B  3.42 1.51 5.44 
8 C  5.65 2.81 1.89 
1 J  1.6 2.65 1.44 
5 H 26.78 27.04 21.06 
1 L  1.20 1.41 2.04 
2 M  1.23 1.72 2.47 
4 R 66.13 51.49 16.62 
5 F  -- 46.89 22.35 

或者有np.nan對我的作品也:

#converting to `NaN` if necessary 
#df1.columns = df1.columns.astype(float) 
#df2.columns = df2.columns.astype(float) 
#df3.columns = df3.columns.astype(float) 

dfs = [df1,df2, df3] 
df = pd.concat([df.set_index(np.nan, append=True) for df in dfs]) 
print (df) 
     1.0 2.0 3.0 
    nan      
1 A 17.03 13.41 19.61 
7 B  3.42 1.51 5.44 
8 C  5.65 2.81 1.89 
1 J  1.6 2.65 1.44 
5 H 26.78 27.04 21.06 
1 L  1.20 1.41 2.04 
2 M  1.23 1.72 2.47 
4 R 66.13 51.49 16.62 
5 F  -- 46.89 22.35 
+0

總是很棒的解釋。非常感謝 – ge00rge