03 10Pandas 資料合併concat

2021-07-25 15:41:19 字數 4115 閱讀 2092

注意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 ...