1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import struct import numpy as np import pandas as pd
def number_to_hex(num): if isinstance(num, int): if -2147483648 <= num <= 2147483647: return struct.pack('@i', num).hex() elif -9223372036854775808 <= num <= 9223372036854775807: return struct.pack('@q', num).hex() else: return num if isinstance(num, float): return struct.pack('@d', num).hex() if isinstance(num, np.float32): return num.tobytes().hex() if isinstance(num, np.float64): return num.tobytes().hex() return num
def to_hex(data): if isinstance(data, list): return [to_hex(e) for e in data] if isinstance(data, dict): return {to_hex(k): to_hex(v) for k, v in data.items()} if isinstance(data, pd.Series): return data.apply(lambda x: to_hex(x) if pd.notna(x) else None) if isinstance(data, pd.DataFrame): result = [] for index, row in data.iterrows(): row_hex = [] for value in row: try: row_hex.append(to_hex(value)) except ValueError: row_hex.append(None) result.append(row_hex) return pd.DataFrame(result, index=data.index, columns=data.columns) return number_to_hex(data)
if __name__ == '__main__': a = 1234567890123 e = 2.71 p = 3.14 print(to_hex(a), to_hex(e), to_hex(p)) print(to_hex(pd.DataFrame([[1,2],[3,4]], columns=["A", "B"]))) print(to_hex({1.3: [1, 2.3]}))
|