pandas表字段為空用其餘表替換

2021-10-25 09:50:27 字數 3039 閱讀 8608

需求:要求將兩張表合併,第一張表字段為空時用第二張表字段代替

import pandas as pd

import numpy as np

##修改列的名字

defnull_next_fill

(df1,df2,merge_list)

:#當需要匹配的引數為兩個時,將需要匹配的引數提前,防止在之後的操作中重新命名

for i,j in

enumerate

(merge_list)

: df1_new = df1[j]

df1 = df1.drop(j,axis=1)

df1.insert(i,j,df1_new)

df2_new = df2[j]

df2 = df2.drop(j,axis=1)

df2.insert(i,j,df2_new)

#尋找df1與df2中的共有的列名

same_col=

[i for i in df1.columns if i in df2.columns]

#給df2中相同變數賦予新名稱

same_col_new=same_col.copy(

)for i in

range

(len

(merge_list)

,len

(same_col)):

same_col_new[i]

=same_col_new[i]

+'_new'

#修改列名

for i,j in

zip(same_col,same_col_new)

: df2 = df2.rename(columns=

)#將df1和df2以關鍵字匹配

rel_df = pd.merge(df1,df2,on=merge_list,how=

'outer'

)#講df中空缺的值用df2中的值填補

for i,j in

zip(same_col[

len(merge_list):]

,same_col_new[

len(merge_list):]

):rel_df.loc[rel_df[i]

.isnull(

),i]

=rel_df[j]

#刪除過程**現的變數(優化)

drop_col=

[i for i in same_col_new if i not

in merge_list]

rel_df=rel_df.drop(drop_col,axis=1)

return rel_df

test1=pd.dataframe(

)test1[

'id']=

[1,2

,3,4

]test1[

'data']=

[1,2

,3,4

]test1[

'***']=

[1,2

,np.nan,2]

test1[

'age']=

[14,16

,18,40

]test1[

'location']=

[np.nan,np.nan,21,

53]test1.head(

)

iddata

***age

location01

11.0

14nan12

22.0

16nan23

3nan

1821.034

42.0

4053.0

test2=pd.dataframe(

)test2[

'id']=

[1,2

,3,5

]test2[

'data']=

[1,3

,3,4

]test2[

'***']=

[1,2

,1,2

]test2[

'age']=

[14,16

,28,40

]test2[

'name']=

[321

,321

,321

,321

]test2.head(

)

iddata

***age

name01

111432112

321632123

312832135

4240321

test3=pd.dataframe(

)test3[

'id']=

[4]test3[

'data']=

[4]test3[

'name']=

[32]test3.head(

)

iddata

name04

432

ons_list=

['id'

,'data'

]df3=null_next_fill(test1,test2,ons_list)

df3

iddata

***age

location

name01

11.0

14.0

nan321.012

22.0

16.0

nannan23

31.0

18.0

21.0

321.034

42.0

40.0

53.0

nan423

2.016.0

nan321.055

42.0

40.0

nan321.0

hive分割槽表增加字段新增字段值為空的bug

目錄 1.修改元資料 2.刪除當前分割槽重建 3.更新指定分割槽的元資料 最近在查hive版本問題,發現在hive1.1.0和hive1.2.1上,分割槽表新增欄位後新增字段值為空的情況。網上查了資料,提供了兩種解決辦法 修改hive元資料sds表的cd id欄位,原因是修改表結構後,元資料庫中的s...

Hive分割槽表增加字段新增字段值為空的bug

hive jira 最近在查hive版本問題,發現在hive1.1.0和hive1.2.1上,分割槽表新增欄位後新增字段值為空的情況。網上查了資料,提供了兩種解決辦法 1.修改hive元資料sds表的cd id欄位,原因是修改表結構後,元資料庫中的sds中該表對應的cd id會改變,但是該錶分割槽下...

oracle判斷資料表的字段內容是否為空

最近在用oracle資料庫select資料,因為之前都是在用mysql,總是會遇到一些問題,記錄一下。有乙個select查詢是要多表查詢的,然後要找出某一表中的某一欄位是否為空,或者不為空的情況。為空則為未使用,不為空則為已使用。可以使用 is null 和is not null 如 1 selec...