将 python 中的数据格式转换为 ascii

Convert Data format in python to ascii

来自 Allen Bradley PLC 的数据在 'value'

列中采用 5 位数字的格式
| tagid | value | datetime                | quality |
|-------|-------|-------------------------|---------|
| T0    | 21328 | 05-03-2021 14:11:53.087 | 192     |
| T1    | 12340 | 05-03-2021 14:14:25.787 | 192     |
| T2    | 17992 | 05-03-2021 14:16:52.687 | 192     |
| T0    | 17992 | 05-03-2021 14:19:14.470 | 192     |
| T1    | 17992 | 05-03-2021 14:21:31.623 | 192     |
| T2    | 21328 | 05-03-2021 14:23:50.220 | 192     |
| T0    | 21328 | 05-03-2021 14:26:13.747 | 192     |
| T1    | 17992 | 05-03-2021 14:28:29.817 | 192     |
| T2    | 17992 | 05-03-2021 14:31:03.603 | 192     |

最初我无法识别从这个 5 位数的值中获取所需值的步骤。

然后在 Excel/Python 中进行了一些实验后,我执行了以下步骤并获得了正确的期望值

步数:
第 1 步。将值除以 256 并四舍五入(例如 17992/256 即 70
第 2 步。执行 Mod 相同的值(例如:=Mod(17992,256) 即 72
步骤 3. 找到等于 70 的 Ascii 值,即 F
第 4 步. 找到等于 72 的 Ascii 值,即 H
第 5 步:连接 F& H 即 FH

所以 17992 的期望值是 'FH' ,12340 是 '0468'

| tagid | value | datetime                | quality |
|-------|-------|-------------------------|---------|
| T0    | FH    | 05-03-2021 14:11:53.087 | 192     |
| T1    | 02    | 05-03-2021 14:14:25.787 | 192     |

在python数据框中有没有简单有效的方法来完成上述步骤,而不是一步一步做

  • 简单整数divmod
  • apply()转系列获取ASCII码
df.value = (df.value//256).apply(chr) + (df.value%256).apply(chr)

tagid value datetime quality
0 T0 SP 05-03-2021 14:11:53.087 192
1 T1 04 05-03-2021 14:14:25.787 192
2 T2 FH 05-03-2021 14:16:52.687 192
3 T0 FH 05-03-2021 14:19:14.470 192
4 T1 FH 05-03-2021 14:21:31.623 192
5 T2 SP 05-03-2021 14:23:50.220 192
6 T0 SP 05-03-2021 14:26:13.747 192
7 T1 FH 05-03-2021 14:28:29.817 192
8 T2 FH 05-03-2021 14:31:03.603 192

您可以使用 apply 方法在整个 DataFrame(或 Series)中应用函数。

df['value_converted'] = df['value'].apply(lambda x: chr(round(x / 256)) + chr(x % 256))