注意concat與merge的區別,concat是沿軸方向將多個物件合併到一起。
numpy 和 pandas裡都有實現concat的函式與功能。
import numpy as np
import pandas as pd
# 建立兩個dataframe
arr1 = np.random.randint(0, 10, (3, 4))
arr2 = np.random.randint(0, 10, (3, 4))
print arr1
print arr2
[[6 5 2 1]
[9 4 2 0]
[1 6 0 2]]
[[3 8 1 5]
[3 2 1 9]
[2 8 4 8]]
# 呼叫.concatenate, 並將兩個ndarray組成list傳入,預設是縱向合併
print np.concatenate([arr1, arr2])
[[6 5 2 1]
[9 4 2 0]
[1 6 0 2]
[3 8 1 5]
[3 2 1 9]
[2 8 4 8]]
# 指定軸方向,axis=1時是橫向合併
print np.concatenate([arr1, arr2], axis=1)
[[6 5 2 1 3 8 1 5]
[9 4 2 0 3 2 1 9]
[1 6 0 2 2 8 4 8]]
# index 沒有重複的情況
ser_obj1 = pd.series(np.random.randint(0, 10, 5), index=range(0,5))
ser_obj2 = pd.series(np.random.randint(0, 10, 4), index=range(5,9))
ser_obj3 = pd.series(np.random.randint(0, 10, 3), index=range(9,12))
print ser_obj1
print ser_obj2
print ser_obj3
0 9
1 8
2 8
3 0
4 1
dtype: int64
5 7
6 5
7 8
8 0
dtype: int64
9 1
10 7
11 7
dtype: int64
# 呼叫.concat,並將兩個dataframe組成list傳入,預設縱向合併
pd.concat([ser_obj1, ser_obj2, ser_obj3])
0 9
1 8
2 8
3 0
4 1
5 7
6 5
7 8
8 0
9 1
10 7
11 7
dtype: int64
# 設定為橫向合併
print pd.concat([ser_obj1, ser_obj2, ser_obj3], axis=1)
0 1 2
0 9.0 nan nan
1 8.0 nan nan
2 8.0 nan nan
3 0.0 nan nan
4 1.0 nan nan
5 nan 7.0 nan
6 nan 5.0 nan
7 nan 8.0 nan
8 nan 0.0 nan
9 nan nan 1.0
10 nan nan 7.0
11 nan nan 7.0
# index 有重複的情況
ser_obj1 = pd.series(np.random.randint(0, 10, 5), index=range(5))
ser_obj2 = pd.series(np.random.randint(0, 10, 4), index=range(4))
ser_obj3 = pd.series(np.random.randint(0, 10, 3), index=range(3))
print ser_obj1
print ser_obj2
print ser_obj3
0 7
1 4
2 5
3 1
4 8
dtype: int64
0 3
1 6
2 8
3 2
dtype: int64
0 9
1 1
2 8
dtype: int64
# 合併後索引保持不變
print pd.concat([ser_obj1, ser_obj2, ser_obj3])
0 7
1 4
2 5
3 1
4 8
0 3
1 6
2 8
3 2
0 9
1 1
2 8
dtype: int64
# 相當於多個series的內鏈結
print pd.concat([ser_obj1, ser_obj2, ser_obj3], axis=1, join='inner')
0 1 2
0 7 3 9
1 4 6 1
2 5 8 8
df_obj1 = pd.dataframe(np.random.randint(0, 10, (3, 2)), index=['a', 'b', 'c'],
columns=['a', 'b'])
df_obj2 = pd.dataframe(np.random.randint(0, 10, (2, 2)), index=['a', 'b'],
columns=['c', 'd'])
print df_obj1
print df_obj2
a b
a 2 0
b 5 0
c 4 9
c d
a 4 7
b 9 9
print pd.concat([df_obj1, df_obj2])
a b c d
a 2.0 0.0 nan nan
b 5.0 0.0 nan nan
c 4.0 9.0 nan nan
a nan nan 4.0 7.0
b nan nan 9.0 9.0
print pd.concat([df_obj1, df_obj2], axis=1)
a b c d
a 2 0 4.0 7.0
b 5 0 9.0 9.0
c 4 9 nan nan
注:部分例子來自於小象學院robin課程 pandas資料合併
pandas 提供了三種主要方法可以對資料進行合併 pandas.merge 方法 資料庫風格的合併 例如,通過merge 方法將兩個dataframe合併 on name 的意思是將name列當作鍵 預設情況下,merge做的是內連線 inner 即鍵的交集。其他方式還有左連線 left 右連線 ...
pandas合併資料merge
snailtyan 本文主要是關於pandas的一些基本用法。usr bin env python coding utf 8 import pandas as pd import numpy as np test 1 定義資料 left pd.dataframe right pd.dataframe...
pandas (七)資料合併
合併拼接行 將df2中的行新增到df1的尾部 指定列合併成乙個新錶新列 ndf df 提名1 提名2 ignore index true 提名3 ignore index true ndf pd.dataframe ndf,columns 姓名 將df2中的列新增到df1的尾部 df.concat ...