2017-04-24 74 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