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':list('aaabbb')})
How to encode and decode column F.
Expected Output:
Should have two more columns with encoded and decoded values
A B C D E F Encoded_Column Decoded_Column
0 a 4 7 1 5 a <!--Encoded Value--> a
1 b 5 8 3 3 a <!--Encoded Value--> a
2 c 4 9 5 6 a <!--Encoded Value--> a
3 d 5 4 4 9 b <!--Encoded Value--> b
4 e 5 2 2 2 b <!--Encoded Value--> b
5 f 4 0 0 4 b <!--Encoded Value--> b
You can use this solution implemented to pandas by Series.apply
:
from Crypto.Cipher import XOR
import base64def 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 4 7 1 5 a b'EQ==' a
1 b 5 8 3 3 a b'EQ==' a
2 c 4 9 5 6 a b'EQ==' a
3 d 5 4 4 9 b b'Eg==' b
4 e 5 2 2 2 b b'Eg==' b
5 f 4 0 0 4 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 in load['F']]
load['Decoded_Column'] = [decode('password', x) for x in load['Encoded_Column']]print (load)A B C D E F Encoded_Column Decoded_Column
0 a 4 7 1 5 a w5E= a
1 b 5 8 3 3 a w5E= a
2 c 4 9 5 6 a w5E= a
3 d 5 4 4 9 b w5I= b
4 e 5 2 2 2 b w5I= b
5 f 4 0 0 4 b w5I= b