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()

 

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