代码之家  ›  专栏  ›  技术社区  ›  Elham

将JSON传输到熊猫数据帧

  •  -1
  • Elham  · 技术社区  · 5 年前

    我试图从两个JSON文件中读取一些数据,并找到具有相同名称的用户,然后从他们那里获取特定键的值,但是,我对其中一个(data_bvp)有问题,它在列表中有100行和1列。 当我将数据帧保存为csv文件时,我得到了这个

    第一个JSON文件如下所示:

    “name”:“alex”:[“bvp”:[1,2,3],“gsr”:[3,2,1],“name”:“laura”:[“bvp”:[2,3,4],“gsr”:[3,2,1]
    

    secon jason文件包含以下元素:

    “name”:“alex”:[“calm”:0,“tension”:1],“name”:“laura”:[“calm”:1,“tesinion”:0
    

    我要获取具有相同名称的数据,以便从每个JSON文件中获取bvp和tension的值,并将其保存为csv文件。

    数据似乎没有以正确的格式保存,如[[1,2,3],[2,3,4]] 我可以看到列表如下所示:[1,2,3,[2,3,4

    实际上,我的最终数据集如下所示:

    name col1 col2 col3 tension
    亚历克斯1 2 3 1
    劳拉2 3 4 0
    

    你知道我的代码有什么问题吗? 谢谢您!

    with open('raw_data-export.json')as data_file:
    data_bvp=json.loads(data_file.read())
    arr_b=列表(data_bvp.keys())
    
    将open(“v2-1-data-export.json”)作为数据文件“2:
    data_tension=json.loads(data_file_2.read())
    arr_tension=列表(data_tension.keys())
    
    匹配=[]
    对于我在arr_b:
    对于承受拉力的J:
    如果i==j:
    匹配。附加(i)
    打印(“匹配”,匹配)
    
    
    bvps=[]
    张力=[]
    
    对于匹配项中的b:
    bvps.append(data_bvp[b]['bvp'])
    #问题
    
    对于匹配项中的t:
    tension.append(data_tension[t]['pre'][时态])
    
    
    
    bvp_data_frame=pd.数据帧(bvps)
    bvp_data_frame.to_csv(“/bvp.csv”)。
    enter image description here

    第一个JSON文件如下:

    { "Name": "Alex" :["bvp":[1,2,3], "gsr":[3,2,1] ] } , { "Name": "Laura" :["bvp":[2,3,4], "gsr":[3,2,1] ] }
    

    secon jason文件包含以下元素:

    { "Name" : "Alex" : ["calm" :0 , "tension":1] }, { "Name": "Laura" : ["calm":1, "tesnion":0}
    

    我要获取同名的数据,从每个JSON文件中获取bvp和tension的值,并将其保存为csv文件。

    数据似乎没有以正确的格式保存,如[[1,2,3],[2,3,4]] 我可以看到列表如下所示:[1,2,3,[2,3,4

    实际上,我的最终数据集如下所示:

     name   col1 col2 col3 tension
      Alex   1   2    3    1
      Laura  2   3    4    0
    

    你知道我的代码有什么问题吗? 谢谢您!

    with open('raw_data-export.json') as data_file:
        data_bvp = json.loads(data_file.read())
    arr_b = list(data_bvp.keys())
    
    with open('v2-1-data-export.json') as data_file_2:
        data_tension = json.loads(data_file_2.read())
    arr_tension = list(data_tension.keys())
    
    matches =[]
    for i in arr_b:
        for j in arr_tension:
            if i == j:
                matches.append(i)
    print("MATCHES", matches)
    
    
    bvps = []
    tension = []
    
    for b in matches:
        bvps.append(data_bvp[b]['bvp'])
           # PROBLEM 
    
    for t in matches:
        tension.append(data_tension[t]['pre']['tense'])
    
    
    
    bvp_data_frame = pd.DataFrame(bvps)
    bvp_data_frame.to_csv('./bvp.csv')
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Valdi_Bo    5 年前

    我创建的测试数据帧如下:

    t1 = '''[
        {"Name": "Alex",  "bvp": [1,2,3], "gsr": [3,2,1]},
        {"Name": "Laura", "bvp": [2,3,4], "gsr": [3,2,1]} ]'''
    df1 = pd.DataFrame(json.loads(t1))    
    t2 = '''[
        {"Name": "Alex",  "calm": 0, "tension": 1},
        {"Name": "Laura", "calm": 1, "tension": 0} ]'''
    df2 = pd.DataFrame(json.loads(t2))
    

    (稍有变化,因为您的原始JSON字符串导致了一个错误)。

    第一步是创建一个工作数据框架-打破 bvp 柱 分列,原始索引:

    wrk = pd.DataFrame(df1.bvp.tolist(), index=df1.index,
        columns=['col1', 'col2', 'col3'])
    

    结果是:

       col1  col2  col3
    0     1     2     3
    1     2     3     4
    

    要获得最终结果,请运行:

    df1.join(wrk).drop(columns=['bvp', 'gsr']).merge(df2, on='Name')
    

    注意操作顺序:

    • 弗斯特 DF1型 加入 WRK (在索引上)。
    • 那么 英属维尔京群岛 GSR公司 列被删除。
    • 最后结果是 合并 D与 DF2型 (开 姓名 )。