python檢查兩個dataframe相同的列是否是大小寫變化

今天寫代碼的時候碰到一個需求,兩個dataframe,一個是最新從新的csv拿的,一個是上一次生產的csv拿的,其中可能有些大小寫和名稱發送變化,要寫段腳本檢查出來

現在想到的思路是先算出差集(即兩個dataframe中相同的那部分),然後新增一列,這一列的屬性爲要檢查大小寫的列的大寫形態,然後將兩個dataframe進行外連接,匹配上的就是大小寫,沒匹配上的就是新名稱和舊名稱了。

代碼爲:

 for dimiension in dimiensions:
        # 3.1 找大小寫與new和miss
        # 創建用來對比的df,columns爲dimiension,sbk, standard_date, dimension_upper
        # 例如 check_new_df就是new_df的[dimiension,sbk, standard_date, dimension_upper]值
        # check_miss_df就是miss_df的[dimiension,sbk, standard_date, dimension_upper]值
        check_new_df = new_df[[dimiension, 'SBK', 'standard_date']].drop_duplicates(keep='first').copy()
        check_miss_df = miss_df[[dimiension, 'SBK', 'standard_date']].drop_duplicates(keep='first').copy()
        check_new_df['dimension_upper'] = check_new_df[dimiension].str.upper().copy()
        check_miss_df['dimension_upper'] = check_miss_df[dimiension].str.upper().copy()
        
        # 先找new和miss:有問題的值賦值給miss_key_df和new_key_df
        # 對check_new_df和check_miss_df進行外連接,將左邊爲空的(即新文件中沒有但歷史中有的)賦值給miss_key_df,
        # 將右邊爲空的(即歷史文件中沒有但新文件中有的)賦值給new_key_df
        case_check_df = pd.merge(check_new_df, check_miss_df, how='outer', on=['SBK', 'standard_date', 'dimension_upper'])
        field_x = dimiension+'_x'
        field_y = dimiension+'_y'
        # 防止dimension_upper爲空值干擾
        case_check_df = case_check_df[case_check_df['dimension_upper'].notnull()].copy()
        miss_key_df = case_check_df[case_check_df[field_x].isnull()].copy()
        new_key_df = case_check_df[case_check_df[field_y].isnull()].copy()
        
        # 再找大小寫的值
        # 找出大小寫的情況賦值給case_df_1(對比的列能對比上但是field_x和field_y不相等的值)
        case_df_1 = pd.merge(check_new_df, check_miss_df, how='inner', on=['SBK', 'standard_date', 'dimension_upper'])
        case_df_1 = case_df_1[case_df_1[field_x] != case_df_1[field_y]].copy()
        # 將大小寫,new和miss都變成list
        miss_key_list = miss_key_df.values.tolist()
        new_key_list = new_key_df.values.tolist()
        case_df_1_list = case_df_1.values.tolist()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章