gpt4 book ai didi

python - 在 pandas 数据框中将列中的值从十六进制转换为二进制

转载 作者:行者123 更新时间:2023-11-28 21:34:30 25 4
gpt4 key购买 nike

我在 pandas 数据框中有一列有十六进制值,例如:

Data
1A
2B
BB
FF
A7
78
CB

我想将十六进制值转换为二进制,然后从二进制取前 3 位,最后将 3 位值转换为十进制。

二进制数据列将是:

Data
00011010
00101011
10111011
11111111
10100111
01111000
11001011

前 3 位:

Data
010
011
011
111
111
000
011

最后是所需的十进制值:

Data
2
3
3
7
7
0
3

如何做到这一点?我尝试使用 bin() 函数,但它不适用于 pandas 数据框。

最佳答案

我们可以通过一系列操作来做到这一点:

  1. 首先,我们使用 .apply(int, base=16) 将十六进制数转换为 int
  2. 接下来我们将其转换为二进制数据,使用 .apply(bin);
  3. 接下来我们用 .str[2:] 分割前两个字符;
  4. 然后我们用.str[-3:]获取最后三个字符;和
  5. 最后,我们再次将这些解释为 int,使用 .apply(int, base=2)

所以:

>>> df.Data.apply(int, base=16).apply(bin).str[2:].str[-3:].apply(int, base=2)
0 2
1 3
2 3
3 7
4 7
5 0
6 3
Name: Data, dtype: int64

然而,我们可以在这里使用另一种策略:

  1. 我们首先将十六进制数转换为int;和
  2. 然后我们使用 0b111 应用位与。

例如:

>>> df.Data.apply(int, base=16) & 0b111
0 2
1 3
2 3
3 7
4 7
5 0
6 3
Name: Data, dtype: int64

第二次尝试不仅更简单,而且速度也更快,大约提高了 66%:

>>> timeit(first_strategy, number=10000)
6.962630775000434
>>> timeit(second_strategy, number=10000)
2.330652763019316

对于重复样本数据 100 次的数据帧,我们得到:

>>> timeit(first_strategy, number=10000)
17.603060900000855
>>> timeit(second_strategy, number=10000)
5.901462858979357

这又快了 66%。

关于python - 在 pandas 数据框中将列中的值从十六进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53253243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com