Skip to content Skip to sidebar Skip to footer

How To Encode And Decode A Column In Python Pandas?

load = pd.DataFrame({'A':list('abcdef'), 'B':[4,5,4,5,5,4], 'C':[7,8,9,4,2,0], 'D':[1,3,5,4,2,0], 'E':[5

Solution 1:

You can use this solution implemented to pandas by Series.apply:

from Crypto.Cipher import XOR
import base64

def encrypt(key, plaintext):
  cipher = XOR.new(key)
  return base64.b64encode(cipher.encrypt(plaintext))

def decrypt(key, ciphertext):
  cipher = XOR.new(key)
  return cipher.decrypt(base64.b64decode(ciphertext))

load['Encoded_Column'] = load['F'].apply(lambda x: encrypt('password',x))
load['Decoded_Column'] = (load['Encoded_Column'].apply(lambda x: decrypt('password', x))
                                                .str.decode("utf-8"))
print (load)
   A  B  C  D  E  F Encoded_Column Decoded_Column
0  a  4715  a        b'EQ=='              a
1  b  5833  a        b'EQ=='              a
2  c  4956  a        b'EQ=='              a
3  d  5449  b        b'Eg=='              b
4  e  5222  b        b'Eg=='              b
5  f  4004  b        b'Eg=='              b

Another solution:

import base64
def encode(key, clear):
    enc = []
    for i in range(len(clear)):
        key_c = key[i % len(key)]
        enc_c = chr((ord(clear[i]) + ord(key_c)) % 256)
        enc.append(enc_c)
    return base64.urlsafe_b64encode("".join(enc).encode()).decode()

def decode(key, enc):
    dec = []
    enc = base64.urlsafe_b64decode(enc).decode()
    for i in range(len(enc)):
        key_c = key[i % len(key)]
        dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
        dec.append(dec_c)
    return "".join(dec)

load['Encoded_Column'] = load['F'].apply(lambda x: encode('password',x))
load['Decoded_Column'] = load['Encoded_Column'].apply(lambda x: decode('password', x))

Or use list comprehension:

load['Encoded_Column'] = [encode('password',x) for x inload['F']]
load['Decoded_Column'] = [decode('password', x) for x inload['Encoded_Column']]

print (load)
   A  B  C  D  E  F Encoded_Column Decoded_Column
0  a  4715  a           w5E=              a
1  b  5833  a           w5E=              a
2  c  4956  a           w5E=              a
3  d  5449  b           w5I=              b
4  e  5222  b           w5I=              b
5  f  4004  b           w5I=              b

Solution 2:

import pandas as pd
import binascii

load = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,0],
                   'D':[1,3,5,4,2,0],
                   'E':[5,3,6,9,2,4],
                   'F':[binascii.hexlify(x.encode()) for x in'aaabbb']
                    })

   A  B  C  D  E      F
0  a  4715  b'61'1  b  5833  b'61'2  c  4956  b'61'3  d  5449  b'62'4  e  5222  b'62'5  f  4004  b'62'


# decode
binascii.unhexlify(load.loc[1]['F']).decode('utf-8') -->> 'a'

example

print(binascii.hexlify('HelloWorld'.encode())) --> b'48656c6c6f576f726c64'print(binascii.unhexlify('48656c6c6f576f726c64'.encode())) --> b'HelloWorld'

Post a Comment for "How To Encode And Decode A Column In Python Pandas?"