14 Pandas實現資料的合併concat

2021-10-16 17:15:45 字數 4608 閱讀 3719

使用場景:

批量合併相同格式的excel、給dataframe新增行、給dataframe新增列

一句話說明concat語法:

concat語法:pandas.concat(objs, axis=0, join=『outer』, ignore_index=false)

import pandas as pd

import warnings

warnings.filterwarnings(

'ignore'

)

df1 = pd.dataframe(

)df1

ab

cde0

a0b0

c0d0e01

a1b1

c1d1e12

a2b2

c2d2e23

a3b3

c3d3

e3

df2 = pd.dataframe(

)df2

ab

cdf0

a4b4

c4d4f41

a5b5

c5d5f52

a6b6

c6d6f63

a7b7

c7d7f7

1、預設的concat,引數為axis=0、join=outer、ignore_index=false

pd.concat(

[df1,df2]

)

ab

cdef

0a0b0c0

d0e0

nan1

a1b1

c1d1

e1nan2a2

b2c2

d2e2

nan3

a3b3

c3d3

e3nan0a4

b4c4

d4nanf41

a5b5

c5d5

nanf52a6

b6c6

d6nanf63

a7b7

c7d7

nanf7

2、使用ignore_index=true可以忽略原來的索引

pd.concat(

[df1,df2]

, ignore_index=

true

)

ab

cdef

0a0b0c0

d0e0

nan1

a1b1

c1d1

e1nan2a2

b2c2

d2e2

nan3

a3b3

c3d3

e3nan4a4

b4c4

d4nanf45

a5b5

c5d5

nanf56a6

b6c6

d6nanf67

a7b7

c7d7

nanf7

3、使用join=inner過濾掉不匹配的列

pd.concat(

[df1,df2]

, ignore_index=

true

, join=

"inner"

)

ab

cd0a0

b0c0d01

a1b1

c1d12a2

b2c2d23

a3b3

c3d34a4

b4c4d45

a5b5

c5d56a6

b6c6d67

a7b7

c7d7

4、使用axis=1相當於新增新列

df1
ab

cde0

a0b0

c0d0e01

a1b1

c1d1e12

a2b2

c2d2e23

a3b3

c3d3e3

a:新增一列series

s1 = pd.series(

list

(range(4

)), name=

"f")

pd.concat(

[df1,s1]

, axis=

1)

ab

cdef

0a0b0c0

d0e001

a1b1

c1d1e11

2a2b2c2

d2e223

a3b3

c3d3e33

b:新增多列series

s2 = df1.

(lambda x:x[

"a"]

+"_gg"

, axis=

1)

s2
0    a0_gg

1 a1_gg

2 a2_gg

3 a3_gg

dtype: object

s2.name=

"g"

pd.concat(

[df1,s1,s2]

, axis=

1)

ab

cdef

g0a0b0

c0d0e00

a0_gg1a1

b1c1

d1e1

1a1_gg2a2

b2c2

d2e2

2a2_gg3a3

b3c3

d3e3

3a3_gg

# 列表可以只有series

pd.concat(

[s1,s2]

, axis=

1)

fg

00a0_gg11

a1_gg22

a2_gg33

a3_gg

# 列表是可以混合順序的

pd.concat(

[s1,df1,s2]

, axis=

1)

fa

bcde

g00a0

b0c0

d0e0

a0_gg11

a1b1

c1d1

e1a1_gg22

a2b2

c2d2

e2a2_gg33

a3b3

c3d3

e3a3_gg

df1 = pd.dataframe([[

1,2]

,[3,

4]], columns=

list

('ab'))

df1

ab

0121

34

df2 = pd.dataframe([[

5,6]

,[7,

8]], columns=

list

('ab'))

df2

ab

0561

781、給1個dataframe新增另乙個dataframeab

0121

3405

6178

2、忽略原來的索引ignore_index=true

true)a

b012

1342

5637

8 3、可以一行一行的給dataframe新增資料

# 乙個空的df

df = pd.dataframe(columns=

['a'])

df

a

a:低效能版本

for i in

range(5

):# 注意這裡每次都在複製

, ignore_index=

true

)df

a0

0112

2334

4 b:效能好的版本

# 第乙個入參是乙個列表,避免了多次複製

pd.concat(

[pd.dataframe(

[i], columns=

['a'])

for i in

range(5

)], ignore_index=

true

)

a0

0112

2334

4

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