Last active
          October 6, 2025 13:15 
        
      - 
      
 - 
        
Save simonespa/7e65b3f2f604f6a3d5a1bd2f3530ff28 to your computer and use it in GitHub Desktop.  
    Pandas and HashingEncoder
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | # Splits the values and expands them in multiple numbered columns | |
| temp_df = df[column].str.split("|", expand=True).fillna('') | |
| # One-Hot encodes all the values for each column | |
| temp_df = pd.get_dummies(temp_df).astype('uint8') | |
| # Removes the "N_" prefixe for each column to expose duplicates | |
| temp_df = remove_prefixes(temp_df) | |
| # Merges the duplicate columns | |
| temp_df = merge_columns(temp_df) | |
| # For each row, the duplicate columns must be either all zeros or have 1 set in only one of them. | |
| # If more than one column has 1, the sum will be greater than 1, indicating an error in the | |
| # split/expansion and hot-encoding process. If this happens, it will be fixed by setting the resulting | |
| # column to 1 | |
| error_detected = df[column_control].gt(1).sum().copy() | |
| if error_detected > 0: | |
| print(f"Detected {error_detected} rows with duplicates for {column} column. Fixing it now.") | |
| # set everything greater than zero as "1", otherwise leave it "0" | |
| df[column_control] = np.where(df[column_control] > 0, 1, 0) | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | from category_encoders import HashingEncoder | |
| for column in columns: | |
| temp_df = pd.concat([ | |
| temp_df, | |
| pd.get_dummies( | |
| df[column].str.split("|", expand=True).fillna('') | |
| ).astype('uint8') | |
| ], axis='columns') | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | from category_encoders import HashingEncoder | |
| N = unique[column] | |
| encoder = HashingEncoder( | |
| cols=[column], | |
| n_components=math.ceil(math.log2(N)), # the number of bits required to encode N elements | |
| hash_method='sha256' # https://docs.python.org/3/library/hashlib.html#constructors | |
| ) | |
| df = encoder.fit_transform(df) | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment