将 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数据框中有没有简单有效的方法来完成上述步骤,而不是一步一步做
- 简单整数div和mod
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))
来自 Allen Bradley PLC 的数据在 'value'
| 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数据框中有没有简单有效的方法来完成上述步骤,而不是一步一步做
- 简单整数div和mod
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))