2017-04-24 4 views
1

私は6つの異なるデータフレームを持っています。2つ以上のデータフレームを操作する

これを行う唯一の方法は、毎回2を追加することですが、これを行うにはより効率的な方法が必要であると思います。

また、インデックスとヘッダーの名前を変更することも楽しみにしています。私は1つ1つの方法を知っていますが、効率的な方法もあるはずです。

私が直面している最後の問題は、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

あなたは選択NaN列に対して、concatを使用することができますset_indexlist comprehensionで可能な使用df.columns[0]です:

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:

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

関連する問題