반응형
팬더 컬럼 내의 JSON 데이터를 새 컬럼으로 변환하는 방법
ADSB json 데이터의 쇼트 버전을 가지고 있으며, Icao, Alt, Lat, Long, Spd, Cou로 변환하고 싶습니다.
알페렌이 시킨 후에
df = pd.read_json('2016-06-20-2359Z.json', lines=True),
데이터 프레임에 로드할 수 있습니다.하지만,df.acList
이
[{'Id'}: 10537990, 'Rcvr': 1, 'HasSig': False, ... 이름: acList, dtype: 객체
Icao, Alt, Lat, Long, Spd, Cou 데이터는 어떻게 얻을 수 있습니까?
"src":1,
"feeds":[
{
"id":1,
"name":"ADSBexchange.com",
"polarPlot":false
}
],
"srcFeed":1,
"showSil":true,
"showFlg":true,
"showPic":true,
"flgH":20,
"flgW":85,
"acList":[
{
"Id":11281748,
"Rcvr":1,
"HasSig":false,
"Icao":"AC2554",
"Bad":false,
"Reg":"N882AS",
"FSeen":"\/Date(1466467166951)\/",
"TSecs":3,
"CMsgs":1,
"AltT":0,
"Tisb":false,
"TrkH":false,
"Type":"CRJ2",
"Mdl":"2001
BOMBARDIER INC
CL-600-2B19",
"Man":"Bombardier",
"CNum":"7503",
"Op":"EXPRESSJET AIRLINES INC - ATLANTA, GA",
"OpIcao":"ASQ",
"Sqk":"",
"VsiT":0,
"WTC":2,
"Species":1,
"Engines":"2",
"EngType":3,
"EngMount":1,
"Mil":false,
"Cou":"United States",
"HasPic":false,
"Interested":false,
"FlightsCount":0,
"Gnd":false,
"SpdTyp":0,
"CallSus":false,
"TT":"a",
"Trt":1,
"Year":"2001"
},
{
"Id":11402205,
"Rcvr":1,
"HasSig":true,
"Sig":110,
"Icao":"ADFBDD",
"Bad":false,
"FSeen":"\/Date(1466391940977)\/",
"TSecs":75229,
"CMsgs":35445,
"Alt":8025,
"GAlt":8025,
"AltT":0,
"Call":"TEST1234",
"Tisb":false,
"TrkH":false,
"Sqk":"0262",
"Help":false,
"VsiT":0,
"WTC":0,
"Species":0,
"EngType":0,
"EngMount":0,
"Mil":true,
"Cou":"United States",
"HasPic":false,
"Interested":false,
"FlightsCount":0,
"Gnd":true,
"SpdTyp":0,
"CallSus":false,
"TT":"a",
"Trt":1
}
],
"totalAc":4231,
"lastDv":"636019887431643594",
"shtTrlSec":61,
"stm":1466467170029
}
</pre>
데이터가 이미 있는 경우acList
다음과 같은 작업을 수행할 수 있습니다.
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
팬더 1.0 이후 수입량은 다음과 같습니다.
import pandas as pd
pd.json_normalize(df.acList[0])
@Sergey의 답변으로 문제가 해결되었지만 데이터 프레임 컬럼의 json이 객체가 아닌 문자열로 유지되었기 때문에 문제가 발생했습니다.기둥 매핑을 위한 추가 단계를 추가해야 했습니다.
import json
import pandas as pd
pd.io.json.json_normalize(df.acList.apply(json.loads))
팬더 1.0 이후 json_normalize는 최상위 네임스페이스에서 사용할 수 있습니다.따라서 다음을 사용합니다.
import pandas as pd
pd.json_normalize(df.acList[0])
ThinkBonobo의 답변에 대해서는 아직 코멘트는 할 수 없지만 칼럼의 JSON이 사전이 아닌 경우에는 계속 할 수 있습니다..apply
그렇게 될 때까지.그래서 저 같은 경우에는
import json
import pandas as pd
json_normalize(
df
.theColumnWithJson
.apply(json.loads)
.apply(lambda x: x[0]) # the inner JSON is list with the dictionary as the only item
)
제 경우에는 몇 가지 누락된 값이 있었습니다.None
그런 다음 새 열을 만든 후 원래 열도 삭제하는 보다 구체적인 코드를 만들었습니다.
for prefix in ['column1', 'column2']:
df_temp = df[prefix].apply(lambda x: {} if pd.isna(x) else x)
df_temp = pd.io.json.json_normalize(df_temp)
df_temp = df_temp.add_prefix(prefix + '_')
df.drop([prefix], axis=1, inplace=True)
df = pd.concat([df, df_temp], axis = 1, sort=False)
언급URL : https://stackoverflow.com/questions/46391291/how-to-convert-json-data-inside-a-pandas-column-into-new-columns
반응형
'programing' 카테고리의 다른 글
다중 응답 AJAX 요청 (0) | 2023.03.07 |
---|---|
Gson에서 JSON 문자열: 큰따옴표 제거 (0) | 2023.03.07 |
버전 4.0.1 이후 create-module-app이 작동하지 않음 (0) | 2023.03.02 |
Wordpress - 미디어 라이브러리를 사용하여 이미지 가져오기 (0) | 2023.03.02 |
타이머가 있는 Jquery/Ajax 콜 (0) | 2023.03.02 |