如何将熊猫列中的JSON数据转换为新列

use*_*657 6 python json pandas

我有这个简短版本的ADSB json数据,想将其转换为datacab列,例如Icao,Alt,Lat,Long,Sdd,Cou .....

在Alperen告诉我这样做之后

df = pd.read_json('2016-06-20-2359Z.json', lines=True), 
Run Code Online (Sandbox Code Playgroud)

我可以将其加载到DataFrame中。但是,df.acList

[{'Id':10537990,'Rcvr':1,'HasSig':False,...
名称:acList,dtype:对象

如何获取Icao,Alt,Lat,Long,Sdd,Cou数据?

 “ src”:1,
   “提要”:[  
      {  
         “ id”:1,
         “名称”:“ ADSBexchange.com”,
         “ polarPlot”:false
      }
   ],
   “ srcFeed”:1,
   “ showSil”:是的,
   “ showFlg”:是的,
   “ showPic”:是的,
   “ flgH”:20,
   “ flgW”:85,
   “ acList”:[  
      {  
         “ Id”:11281748,
         “ Rcvr”:1,
         “ HasSig”:否,
         “ Icao”:“ AC2554”,
         “错误”:false,
         “ Reg”:“ N882AS”,
         “ FSeen”:“ \ /日期(1466467166951)\ /”,
         “ TSecs”:3,
         “ CMsgs”:1,
         “ AltT”:0,
         “ Tisb”:否,
         “ TrkH”:否,
         “类型”:“ CRJ2”,
         “ Mdl”:“ 2001 
炸弹公司 
 CL-600-2B19“,
         “ Man”:“ Bombardier”,
         “ CNum”:“ 7503”,
         “ Op”:“ EXPRESSJET AIRLINES INC-乔治亚州亚特兰大”,
         “ OpIcao”:“ ASQ”,
         “ Sqk”:“”,
         “ VsiT”:0,
         “ WTC”:2,
         “种类”:1,
         “ Engines”:“ 2”,
         “ EngType”:3,
         “ EngMount”:1,
         “ Mil”:false,
         “ Cou”:“美国”,
         “ HasPic”:false,
         “感兴趣”:false,
         “ FlightsCount”:0,
         “ Gnd”:false,
         “ SpdTyp”:0,
         “ CallSus”:否,
         “ TT”:“ a”,
         “ Trt”:1,
         “年份”:“ 2001”
      },
      {  
         “ Id”:11402205,
         “ Rcvr”:1,
         “ HasSig”:是的,
         “签名”:110,
         “ Icao”:“ ADFBDD”,
         “错误”:false,
         “ FSeen”:“ \ /日期(1466391940977)\ /”,
         “ TSecs”:75229,
         “ CMsgs”:35445,
         “ Alt”:8025,
         “ GAlt”:8025,
         “ AltT”:0,
         “通话”:“ TEST1234”,
         “ Tisb”:否,
         “ TrkH”:否,
         “ Sqk”:“ 0262”,
         “帮助”:false,
         “ VsiT”:0,
         “ WTC”:0,
         “种类”:0,
         “ EngType”:0,
         “ EngMount”:0,
         “ Mil”:是的,
         “ Cou”:“美国”,
         “ HasPic”:false,
         “感兴趣”:false,
         “ FlightsCount”:0,
         “ Gnd”:是的,
         “ SpdTyp”:0,
         “ CallSus”:否,
         “ TT”:“ a”,
         “ Trt”:1
      }
   ],
   “ totalAc”:4231,
   “ lastDv”:“ 636019887431643594”,
   “ shtTrlSec”:61,
   “ stm”:1466467170029
}

Ser*_*nov 10

如果您的数据已经acList在pandas DataFrame的列中,则只需执行以下操作:

import pandas as pd
pd.io.json.json_normalize(df.acList[0])

Alt AltT    Bad CMsgs   CNum    Call    CallSus Cou EngMount    EngType ... Sqk TSecs   TT  Tisb    TrkH    Trt Type    VsiT    WTC Year
0   NaN 0   False   1   7503    NaN False   United States   1   3   ...     3   a   False   False   1   CRJ2    0   2   2001
1   8025.0  0   False   35445   NaN TEST1234    False   United States   0   0   ... 0262    75229   a   False   False   1   NaN 0   0   NaN
Run Code Online (Sandbox Code Playgroud)


Thi*_*obo 10

@Sergey 的回答为我解决了这个问题,但我遇到了问题,因为我的数据框列中的 json 被保存为字符串而不是对象。我必须添加映射列的附加步骤:

import json
import pandas as pd
pd.io.json.json_normalize(df.acList.apply(json.loads))
Run Code Online (Sandbox Code Playgroud)

  • 感谢您为我的案例工作,我在第一列中有 JSON 数据,我想将其转置到其他列 (3认同)

Jon*_*jer 7

pandas 1.0开始, json_normalize 在顶级命名空间中可用。因此使用:

import pandas as pd
pd.json_normalize(df.acList[0])
Run Code Online (Sandbox Code Playgroud)