【问题标题】:how to read a csv file with a JSON feature using python如何使用 python 读取具有 JSON 功能的 csv 文件
【发布时间】:2021-08-29 10:57:38
【问题描述】:

我有一个 csv 文件,其中包含如下数据框所示的 JSON 功能

标识 |日期 |会话

001 | 29/8/2019 | [{"start":451;"end":459;"duration":13};{"start":522;"end":528;"duration":11};{"start":568;"end":575;"duration":12};{"start":595;"end":604;"duration":14};{"start":1194;"end":1210;"duration":21}]

002 | 27/8/2019 | [{"start":64;"end":65;"duration":6};{"start":451;"end":456;"duration":10};
{"start":513;"end":516;"duration":8};{"start":537;"end":541;"duration":9};{"start":1208;"end":1215;"duration":12};{"start":1367;"end":1368;"duration":6}]
  • 定义:

Hour01:一天中第一个小时内的会话持续时间(以分钟为单位),从 0001 到 0100 小时。 Hour02:从 0101 到 0200 小时,一天中第 2 个小时内的会话持续时间(以分钟为单位)。等等 . . Hour23:一天中第 24 小时内的会话持续时间(以分钟为单位),从 2301 到 2400 小时。

  • 注 1:每天从“0”分钟开始,到“1440”分钟结束。
  • 注意 2:在每个 Activity 会话的开始处增加了额外的“5 分钟”。
  • 注意 3:会话被视为 VALID only WHEN {session minutes in {duration} is > 9 minutes}
  • 注意 4:对于

在场景 1 中,我们读取了“会话”中的第一行 - {"start"":451;""end"":459;””duration””:13;},这表明 Activity 在第 451 分钟开始并在第 459 分钟结束 ==> 这导致 {459 – 551} 8 分钟的 Activity 在{Hour of day},在该日期{29/8/2019} 对应用户 ID{ec296e97c0}

一个。分钟 451 开始于“Hour 8”,而 459 结束于“Hour 8”。因此,该用户的“8 分钟”活动总数被读取为“8 小时”(如下所示)。 湾。我们在每个活动会话的第一个时段(初始小时)中增加了额外的“5 分钟”。 {8 + 5} 13 分钟分配给“Hour 8”(而不是 8 分钟),如下面的输出所示。 这是一个有效的会话,将捕获 13 分钟的持续时间。 (在应用上述注 2 和 3 后)。

  1. 同样,我们分配所有段 {Session} 并将它们映射到正确的时间。

对于场景 2,当会话跨越两个或多个连续小时时:

  1. 从上面第 4 次会话的示例中,{""start"":595;""end"":604;""duration"":14}。 一世。活动跨越两个小时{10, 11}。 ii.分钟“595 到 600”分配给“Hour10”,“600 到 604”分配给“Hour11”。 (注 2 和 3 在每个会话中相应应用)

2。每个小时{Hr1…Hr24} 的总分钟数是根据“预期输出”得出并制表的

完全坚持将上述带有 JSON 值的 csv 格式设置为以下格式: EXPECTED –OUTPUT {按照以下格式}显示 1 行作为结果示例

ID |   Date  |Hr01|Hr02|Hr03|Hr04|Hr05|Hr06|Hr07|Hr08|Hr09|Hr10|Hr11|.....|Hr24
001|27/8/2019|    |    |    |    |    |    |    | 13 | 11 | 22 | 33 |...
002|26/8/2019|...

可以帮助建议如何使用python 实现这一目标吗?我在 python 方面仍然很弱,如果有人可以提供帮助,我真的很感激。

谢谢

【问题讨论】:

    标签: python json parsing


    【解决方案1】:

    这就是你想要的

    import re
    
    CSV_FILE = "file.csv"
    CSV_OUTPUT_FILE = "output.csv"
    
    file = open(CSV_OUTPUT_FILE, "w")
    file.close()
    
    with open(CSV_FILE, "r") as file:
        for line in file:
            if line == "\n":
                continue
            seperaters = [i for i, ltr in enumerate(line) if ltr == "|"]
            id = line[: seperaters[0]].replace(" ", "")
            date = line[seperaters[0] + 1 : seperaters[1]].replace(" ", "")
            raw_data = [int(s) for s in re.findall(r"\d+", line[seperaters[1] + 1 :])]
            Hours = [100 * _ for _ in range(1, 25)]
            hours = [0 for _ in range(24)]
            data = []
            data_temp = []
            for i in range(len(raw_data)):
                if (i + 1) % 3:
                    data_temp.append(raw_data[i])
                else:
                    data_temp.append(raw_data[i])
                    data.append(data_temp)
                    data_temp = []
            for H in Hours:
                for d in data:
                    if H - 100 <= d[0] <= H and H - 100 <= d[1] <= H:
                        if d[2] >= 9:
                            hours[int(H / 100) - 1] += d[2]
                    elif H - 100 <= d[0] <= H and H <= d[1] <= H + 100:
                        if H - d[0] + 5 >= 9:
                            hours[int(H / 100) - 1] += H - d[0] + 5
                        if d[1] - H + 5 >= 9:
                            hours[int(H / 100)] += d[1] - H + 5
            with open(CSV_OUTPUT_FILE, "a") as file:
                file.write(str(id) + "|")
                file.write(str(date) + "|")
                for h in hours:
                    if h:
                        file.write(str(h) + "|")
                    else:
                        file.write("|")
                file.write("\n")
    

    用您自己的文件替换file.csv

    【讨论】:

      猜你喜欢
      • 2018-05-05
      • 2020-01-18
      • 1970-01-01
      • 2013-06-26
      • 2010-12-08
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多