2017-04-24 2 views
1

Ich habe 6 verschiedene Datenrahmen und möchte eine nach der anderen anhängen.Manipulation von mehr als 2 Datenrahmen

Die einzige Möglichkeit, die ich finde, ist jedes Mal Anhang 2, obwohl ich glaube, dass es eine effizientere Möglichkeit, dies zu tun haben muss.

Ich freue mich auch danach, die Index- und Header-Namen zu ändern, dass ich auch eins nach dem anderen weiß, aber ich glaube auch, dass es auch einen effizienten Weg geben muss.

Das letzte Problem, mit dem ich konfrontiert bin, ist, wie man einen Index mit der Spalte setzt, die NaN ist, wie soll ich mich darauf beziehen, um 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 

Antwort

1

Sie können concat verwenden, für ausgewählte NaN Säule besteht die Möglichkeit, df.columns[0] mit set_index und list 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 

EDIT:

Es NaN Werte scheint Strings sein kann:

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 

Oder wenn es np.nan funktioniert für mich auch:

#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

immer große Erklärungen. Ich danke dir sehr – ge00rge