【问题标题】:Convert a string to a dictionary of type <K: date, V: int>将字符串转换为 <K: date, V: int> 类型的字典
【发布时间】:2021-12-20 01:48:27
【问题描述】:

我正在研究需要来自 BLE 设备的 RSSI 值的 ML 模型。对于这种情况,我创建了一个 Mac 应用程序,在其中将 &lt;K: Date,v: Int&gt; 类型的字典存储在一个文本文件中。请参阅下面的示例。

string = '[2021-10-17 06:52:00 +0000: -47, 2021-10-17 06:52:04 +0000: -50, 2021-10-17 06:52:03 +0000: -50, 2021-10-17 06:52:02 +0000: -47, 2021-10-17 06:52:08 +0000: -46, 2021-10-17 06:51:57 +0000: -50, 2021-10-17 06:52:09 +0000: -48, 2021-10-17 06:52:05 +0000: -49, 2021-10-17 06:52:01 +0000: -48, 2021-10-17 06:51:58 +0000: -50, 2021-10-17 06:51:59 +0000: -50, 2021-10-17 06:52:06 +0000: -47, 2021-10-17 06:52:07 +0000: -48]'

这里,样本中的负值是RSSI值。例如对于前 2 个索引

Date RSSI
2021-10-17 06:52:00 +0000 -47
2021-10-17 06:52:04 +0000 -50

为了我执行任何计算,我需要数据类型为 &lt;Date, Int&gt; 在 python 上等效。如何将上述字符串转换为 Pandas Dataframe 来执行计算?希望这能提供足够的信息。提前谢谢你。

【问题讨论】:

标签: python pandas string


【解决方案1】:

您可以使用re.findall 和一个小的正则表达式:

作为数据框
string = '[2021-10-17 06:52:00 +0000: -47, 2021-10-17 06:52:04 +0000: -50, 2021-10-17 06:52:03 +0000: -50, 2021-10-17 06:52:02 +0000: -47, 2021-10-17 06:52:08 +0000: -46, 2021-10-17 06:51:57 +0000: -50, 2021-10-17 06:52:09 +0000: -48, 2021-10-17 06:52:05 +0000: -49, 2021-10-17 06:52:01 +0000: -48, 2021-10-17 06:51:58 +0000: -50, 2021-10-17 06:51:59 +0000: -50, 2021-10-17 06:52:06 +0000: -47, 2021-10-17 06:52:07 +0000: -48]'

import re
import pandas as pd

df = (pd.DataFrame.from_records(re.findall('([^,]+): (-?\d+)(?:, )?', string[1:-1]),
                                columns=['Date', 'RSSI'])
        .astype({'Date': 'datetime64', 'RSSI': 'int'})
      )

输出:

                         Date RSSI
0   2021-10-17 06:52:00 +0000  -47
1   2021-10-17 06:52:04 +0000  -50
2   2021-10-17 06:52:03 +0000  -50
3   2021-10-17 06:52:02 +0000  -47
4   2021-10-17 06:52:08 +0000  -46
5   2021-10-17 06:51:57 +0000  -50
6   2021-10-17 06:52:09 +0000  -48
7   2021-10-17 06:52:05 +0000  -49
8   2021-10-17 06:52:01 +0000  -48
9   2021-10-17 06:51:58 +0000  -50
10  2021-10-17 06:51:59 +0000  -50
11  2021-10-17 06:52:06 +0000  -47
12  2021-10-17 06:52:07 +0000  -48

作为字典

import re
dict(re.findall('([^,]+): (-?\d+)(?:, )?', string[1:-1]))

输出:

{'2021-10-17 06:52:00 +0000': '-47',
 '2021-10-17 06:52:04 +0000': '-50',
 '2021-10-17 06:52:03 +0000': '-50',
 '2021-10-17 06:52:02 +0000': '-47',
 '2021-10-17 06:52:08 +0000': '-46',
 '2021-10-17 06:51:57 +0000': '-50',
 '2021-10-17 06:52:09 +0000': '-48',
 '2021-10-17 06:52:05 +0000': '-49',
 '2021-10-17 06:52:01 +0000': '-48',
 '2021-10-17 06:51:58 +0000': '-50',
 '2021-10-17 06:51:59 +0000': '-50',
 '2021-10-17 06:52:06 +0000': '-47',
 '2021-10-17 06:52:07 +0000': '-48'}

作为具有正确类型的字典:

import re
import pandas as pd
{pd.to_datetime(k): int(v)
 for k,v in re.findall('([^,]+): (-?\d+)(?:, )?', string[1:-1])}

输出:

{Timestamp('2021-10-17 06:52:00+0000', tz='UTC'): -47,
 Timestamp('2021-10-17 06:52:04+0000', tz='UTC'): -50,
 Timestamp('2021-10-17 06:52:03+0000', tz='UTC'): -50,
 Timestamp('2021-10-17 06:52:02+0000', tz='UTC'): -47,
 Timestamp('2021-10-17 06:52:08+0000', tz='UTC'): -46,
 Timestamp('2021-10-17 06:51:57+0000', tz='UTC'): -50,
 Timestamp('2021-10-17 06:52:09+0000', tz='UTC'): -48,
 Timestamp('2021-10-17 06:52:05+0000', tz='UTC'): -49,
 Timestamp('2021-10-17 06:52:01+0000', tz='UTC'): -48,
 Timestamp('2021-10-17 06:51:58+0000', tz='UTC'): -50,
 Timestamp('2021-10-17 06:51:59+0000', tz='UTC'): -50,
 Timestamp('2021-10-17 06:52:06+0000', tz='UTC'): -47,
 Timestamp('2021-10-17 06:52:07+0000', tz='UTC'): -48}

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多