판다들은 네스트된 json을 읽는다.
어떻게 팬더를 사용하여 다음 구조의 중첩된 json을 읽을 수 있는지 궁금합니다.
{
"number": "",
"date": "01.10.2016",
"name": "R 3932",
"locations": [
{
"depTimeDiffMin": "0",
"name": "Spital am Pyhrn Bahnhof",
"arrTime": "",
"depTime": "06:32",
"platform": "2",
"stationIdx": "0",
"arrTimeDiffMin": "",
"track": "R 3932"
},
{
"depTimeDiffMin": "0",
"name": "Windischgarsten Bahnhof",
"arrTime": "06:37",
"depTime": "06:40",
"platform": "2",
"stationIdx": "1",
"arrTimeDiffMin": "1",
"track": ""
},
{
"depTimeDiffMin": "",
"name": "Linz/Donau Hbf",
"arrTime": "08:24",
"depTime": "",
"platform": "1A-B",
"stationIdx": "22",
"arrTimeDiffMin": "1",
"track": ""
}
]
}
그러면 어레이가 json으로 유지됩니다.나는 차라리 그것을 기둥으로 넓혔으면 좋겠어요.
pd.read_json("/myJson.json", orient='records')
편집하다
첫 번째 답변 감사합니다.질문을 좀 더 자세히 설명하겠습니다. 어레이 내의 중첩된 속성을 평탄화하는 것은 필수가 아닙니다.df.locations['name']를 [A, B, C]만 연결하면 됩니다.
파일에 여러 개의 JSON 개체(한 줄에 1개)가 포함되어 있습니다. 번호, 날짜, 이름 및 위치 열을 유지하고 싶습니다.하지만 저는 그 장소에 합류해야 합니다.
allLocations = ""
isFirst = True
for location in result.locations:
if isFirst:
isFirst = False
allLocations = location['name']
else:
allLocations += "; " + location['name']
allLocations
여기에서의 나의 접근은 효율적인 것 같지 않다 / 판다 스타일.
다음을 사용할 수 있습니다.
import json
with open('myJson.json') as data_file:
data = json.load(data_file)
df = pd.json_normalize(data, 'locations', ['date', 'number', 'name'],
record_prefix='locations_')
print (df)
locations_arrTime locations_arrTimeDiffMin locations_depTime \
0 06:32
1 06:37 1 06:40
2 08:24 1
locations_depTimeDiffMin locations_name locations_platform \
0 0 Spital am Pyhrn Bahnhof 2
1 0 Windischgarsten Bahnhof 2
2 Linz/Donau Hbf 1A-B
locations_stationIdx locations_track number name date
0 0 R 3932 R 3932 01.10.2016
1 1 R 3932 01.10.2016
2 22 R 3932 01.10.2016
편집:
를 구문 분석과 함께 사용할 수 있습니다.name
타고DataFrame
생성자 및 마지막으로 적용됨join
:
df = pd.read_json("myJson.json")
df.locations = pd.DataFrame(df.locations.values.tolist())['name']
df = df.groupby(['date','name','number'])['locations'].apply(','.join).reset_index()
print (df)
date name number locations
0 2016-01-10 R 3932 Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...
노트북으로 작업 중이었기 때문에 누군가 이것을 발견하면 또 다른 선택사항이 있습니다.파일을 df로 읽습니다.
df = pd.read_json('filename.json')
df2 = pd.DataFrame.from_records(df['nest_level_1']['nest_level_2'])
해피 코딩
대신할 수 있는 방법pandas.json_normalize
네스트된 사전에서 선택한 키와 값만 추출하여 자체 데이터 프레임을 구축하는 것입니다.이렇게 하는 주된 이유는 json_normalize가 매우 큰 json 파일에 대해 느려지기 때문입니다(또한 원하는 출력이 항상 생성되지는 않을 수도 있습니다).
그래서, 여기 판다의 중첩된 사전을 평평하게 만드는 다른 방법이 있습니다.glom
목적은 중첩된 사전에서 선택된 키와 값을 추출하여 판다 데이터 프레임의 별도 열에 저장하는 것입니다(:
스텝 바이 스텝 가이드를 소개합니다.https://medium.com/ @httpo.almani / http-pari-in-http-glom-7948345c88f5
import pandas as pd
from glom import glom
from ast import literal_eval
target = {
"number": "",
"date": "01.10.2016",
"name": "R 3932",
"locations":
{
"depTimeDiffMin": "0",
"name": "Spital am Pyhrn Bahnhof",
"arrTime": "",
"depTime": "06:32",
"platform": "2",
"stationIdx": "0",
"arrTimeDiffMin": "",
"track": "R 3932"
}
}
# Import data
df = pd.DataFrame([str(target)], columns=['target'])
# Extract id keys and save value into a separate pandas column
df['id'] = df['target'].apply(lambda row: glom(literal_eval(row), 'locations.name'))
언급URL : https://stackoverflow.com/questions/40588852/pandas-read-nested-json
'programing' 카테고리의 다른 글
복잡한 콘텐츠 필터를 작성하는 가장 효율적인 방법은 무엇입니까? (0) | 2023.03.07 |
---|---|
Spring Boot 테스트 클래스는 애플리케이션 컨텍스트를 재사용하여 테스트 실행을 고속화할 수 있습니까? (0) | 2023.03.07 |
스핀(비지) 컨트롤이 있는 angular.element vs document.getElementById 또는 jQuery 셀렉터 (0) | 2023.03.07 |
AngularJS 지시:링크 기능과 컴파일 기능은 함께 작동합니까? (0) | 2023.03.07 |
util 스키마를 사용하여 목록을 자동 배선하면 NoSchBeanDefinition이 제공됩니다.예외. (0) | 2023.03.07 |