pandas
處理多組數據的時候往往會要用到數據的合並處理,使用 concat
是一種基本的合並方式.而且concat
中有很多參數可以調整,合並成你想要的數據形式.
1、axis(合並方向):axis=0
是預設值,因此未設定任何參數時,函數默認axis=0
。
>>> import pandas as pd >>> import numpy as np #定義資料集 >>> df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) >>> df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) >>> df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d']) #concat縱向合並 >>> res = pd.concat([df1, df2, df3], axis=0) >>> print(res) a b c d 0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 0 1.0 1.0 1.0 1.0 1 1.0 1.0 1.0 1.0 2 1.0 1.0 1.0 1.0 0 2.0 2.0 2.0 2.0 1 2.0 2.0 2.0 2.0 2 2.0 2.0 2.0 2.0
仔細觀察會發現結果的index
是0, 1, 2, 0, 1, 2, 0, 1, 2,若要將index
重置,請看下面。
2、ignore——index(重置index)
#承上一個例子,並將index_ignore設定為True >>> res = pd.concat([df1, df2, df3], axis=0, ignore_index=True) >>> print(res) a b c d 0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 3 1.0 1.0 1.0 1.0 4 1.0 1.0 1.0 1.0 5 1.0 1.0 1.0 1.0 6 2.0 2.0 2.0 2.0 7 2.0 2.0 2.0 2.0 8 2.0 2.0 2.0 2.0
結果的index
變0, 1, 2, 3, 4, 5, 6, 7, 8。
3、join(合並方式)
join='outer'
為預設值,因此未設定任何參數時,函數默認join='outer'
。此方式是依照column
來做縱向合並,有相同的column
上下合並在一起,其他獨自的column
個自成列,原本沒有值的位置皆以NaN
填充。
>>> import pandas as pd >>> import numpy as np >>> df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3]) >>> df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4]) #縱向"外"合並df1與df2 >>> res = pd.concat([df1, df2], axis=0, join='outer') >>> print(res) a b c d e 1 0.0 0.0 0.0 0.0 NaN 2 0.0 0.0 0.0 0.0 NaN 3 0.0 0.0 0.0 0.0 NaN 2 NaN 1.0 1.0 1.0 1.0 3 NaN 1.0 1.0 1.0 1.0 4 NaN 1.0 1.0 1.0 1.0 #原理同上個例子的說明,但只有相同的column合並在一起,其他的會被拋棄。 #縱向"內"合並df1與df2 >>> res = pd.concat([df1, df2], axis=0, join='inner') >>> print(res) b c d 1 0.0 0.0 0.0 2 0.0 0.0 0.0 3 0.0 0.0 0.0 2 1.0 1.0 1.0 3 1.0 1.0 1.0 4 1.0 1.0 1.0 #重置index並打印結果 >>> res = pd.concat([df1, df2], axis=0, join='inner', ignore_index=True) >>> print(res) b c d 0 0.0 0.0 0.0 1 0.0 0.0 0.0 2 0.0 0.0 0.0 3 1.0 1.0 1.0 4 1.0 1.0 1.0 5 1.0 1.0 1.0
4、join_axes(依照axes合並)
>>> import pandas as pd >>> import numpy as np >>> df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3]) >>> df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4]) #依照`df1.index`進行橫向合並 >>> res = pd.concat([df1, df2], axis=1, join_axes=[df1.index]) >>> print(res) a b c d b c d e 1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN 2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 3 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 #移除join_axes,並打印結果 >>> res = pd.concat([df1, df2], axis=1) >>> print(res) a b c d b c d e 1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN 2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 3 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 4 NaN NaN NaN NaN 1.0 1.0 1.0 1.0
5、append(添加數據)
append
只有縱向合並,沒有橫向合並。
>>> import pandas as pd >>> import numpy as np >>> df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d']) >>> df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) >>> df3 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d']) >>> s1 = pd.Series([1,2,3,4], index=['a','b','c','d']) #將df2合並到df1的下面,以及重置index,並打印出結果 >>> res = df1.append(df2, ignore_index=True) >>> print(res) a b c d 0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 3 1.0 1.0 1.0 1.0 4 1.0 1.0 1.0 1.0 5 1.0 1.0 1.0 1.0 #合並多個df,將df2與df3合並至df1的下面,以及重置index,並打印出結果 >>> res = df1.append([df2, df3], ignore_index=True) >>> print(res) a b c d 0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 3 1.0 1.0 1.0 1.0 4 1.0 1.0 1.0 1.0 5 1.0 1.0 1.0 1.0 6 1.0 1.0 1.0 1.0 7 1.0 1.0 1.0 1.0 8 1.0 1.0 1.0 1.0 #合並series,將s1合並至df1,以及重置index,並打印出結果 >>> res = df1.append(s1, ignore_index=True) >>> print(res) a b c d 0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 3 1.0 2.0 3.0 4.0