需求:要求將兩張表合併,第一張表字段為空時用第二張表字段代替
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...