|  | @@ -89,6 +89,12 @@ class Common_ETLMethod(BaseClient):
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              return '-'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def id_type_trans(self,df):
 | 
	
		
			
				|  |  | +        id_columns = [i for i in df.columns if 'id' in i.lower() and 'bid' not in i.lower()]
 | 
	
		
			
				|  |  | +        df[id_columns] = df[id_columns].fillna(-1).applymap(lambda x: round(int(x), 0)).astype("string")
 | 
	
		
			
				|  |  | +        df[id_columns] = df[id_columns].applymap(lambda x: '' if x == '-1' else x)
 | 
	
		
			
				|  |  | +        return df
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def type_trans(self, df_report, columns: list, timeZone_: str, extra_columns: list = []):
 | 
	
		
			
				|  |  |          # 添加字段
 | 
	
		
			
				|  |  |          df_report['profileId'] = self.profile_id
 | 
	
	
		
			
				|  | @@ -102,9 +108,7 @@ class Common_ETLMethod(BaseClient):
 | 
	
		
			
				|  |  |          columns.extend(["timeZone", "profileId"])
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          # 修改字段类型
 | 
	
		
			
				|  |  | -        id_columns = [i for i in columns if 'id' in i.lower() and 'bid' not in i.lower()]
 | 
	
		
			
				|  |  | -        df_report[id_columns] = df_report[id_columns].fillna(-1).applymap(lambda x: round(int(x), 0)).astype("string")
 | 
	
		
			
				|  |  | -        df_report[id_columns] = df_report[id_columns].applymap(lambda x: '' if x == '-1' else x)
 | 
	
		
			
				|  |  | +        df_report = self.id_type_trans(df_report)
 | 
	
		
			
				|  |  |          df_report['date'] = df_report['date'].astype("datetime64")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          # df_report[df_report.select_dtypes('O').columns] = df_report[df_report.select_dtypes('O').columns].astype('string')
 | 
	
	
		
			
				|  | @@ -465,6 +469,7 @@ class SB_ETL(SBClient, Common_ETLMethod):
 | 
	
		
			
				|  |  |          df_targets = pd.json_normalize(list_targets)
 | 
	
		
			
				|  |  |          # df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
 | 
	
		
			
				|  |  |          # df_targets = self.expression_split(df_targets, "resolvedExpressions")
 | 
	
		
			
				|  |  | +        df_targets = self.id_type_trans(df_targets)
 | 
	
		
			
				|  |  |          df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'type'))
 | 
	
		
			
				|  |  |          df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'value'))
 | 
	
		
			
				|  |  |          return self.columnsName_modify(df_targets)
 | 
	
	
		
			
				|  | @@ -960,6 +965,7 @@ class SD_ETL(SDClient, Common_ETLMethod):
 | 
	
		
			
				|  |  |          list_targets = [row for _ in list(self.iter_targets(**param)) for row in _]
 | 
	
		
			
				|  |  |          df_targets = pd.json_normalize(list_targets)
 | 
	
		
			
				|  |  |          # df_targets = self.expression_split(df_targets, "resolvedExpression")
 | 
	
		
			
				|  |  | +        df_targets = self.id_type_trans(df_targets)
 | 
	
		
			
				|  |  |          df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'type'))
 | 
	
		
			
				|  |  |          df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'value'))
 | 
	
		
			
				|  |  |          return self.columnsName_modify(df_targets)
 | 
	
	
		
			
				|  | @@ -1460,7 +1466,7 @@ if __name__ == '__main__':
 | 
	
		
			
				|  |  |      ac_etl = SB_ETL(**AWS_CREDENTIALS)
 | 
	
		
			
				|  |  |      ls = ac_etl.targets_ETL()
 | 
	
		
			
				|  |  |      print(ls)
 | 
	
		
			
				|  |  | -    print(ls.to_excel('obse111.xlsx'))
 | 
	
		
			
				|  |  | +    print(ls.to_excel('obse11.xlsx'))
 | 
	
		
			
				|  |  |      # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
 | 
	
		
			
				|  |  |      # ac_etl.reportV2_campaignsRecord_t3_ETL(conn)
 | 
	
		
			
				|  |  |      # ac_etl.reportV2_adGroupsRecord_t2_ETL(conn)
 |