将Pandas数据框整数列编码为带前导零的16位二进制列
嘿,这个需求我刚好帮别人解决过,给你两个实用的方案,轻松搞定把整数转成16位二进制拆分列的问题!
方法一:字符串格式化法(直观易理解)
这种方法用字符串格式化把整数转成16位二进制,再拆分每一位,非常适合快速上手:
import pandas as pd # 先构造示例数据(替换成你自己的DataFrame即可) df = pd.DataFrame({'num': [20, 5, 33000]}) # 把每个数字转成16位二进制字符串,拆成单个字符后转成整数列 binary_df = df['num'].apply( lambda x: pd.Series(list(f"{x:016b}")).astype(int) ) # 给新列命名,对应从高位到低位的16个bit(bit_15是最高位,bit_0是最低位) binary_df.columns = [f'bit_{i}' for i in range(15, -1, -1)] # 合并原数据和二进制列 final_df = pd.concat([df, binary_df], axis=1) print(final_df)
运行后,你会看到num=20对应的16列就是0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,完全符合你的要求!
方法二:位运算法(高效适合大数据)
如果你的数据集很大,位运算的向量化操作会比apply快很多,原理是通过移位和按位与来提取每一位的值:
import pandas as pd df = pd.DataFrame({'num': [20, 5, 33000]}) # 循环生成16个bit列,从高位到低位 for bit_pos in range(15, -1, -1): # 右移bit_pos位后取最后一位,得到该bit的值 df[f'bit_{bit_pos}'] = (df['num'] >> bit_pos) & 1 print(df)
这个方法不需要处理字符串,直接对数值进行运算,性能更优,百万级数据也能轻松处理。
注意事项
- 确保你的整数范围在
0~65535之间(16位无符号整数的最大值),如果超过这个范围,16位二进制会溢出,需要提前做截断或过滤处理。 - 如果你想让列的顺序从低位到高位,只需要把循环的
range(15, -1, -1)改成range(0, 16)就行,对应命名为bit_0到bit_15。
内容的提问来源于stack exchange,提问作者Mridula Gunturi
相关产品推荐
相关产品推荐

