Загрузка данных JSON во фрейм данных Pandas и создание пользовательских столбцов - PullRequest
0 голосов
/ 13 февраля 2019

Вот пример JSON, с которым я работаю.

{
    ":@computed_region_amqz_jbr4": "587",
    ":@computed_region_d3gw_znnf": "18",
    ":@computed_region_nmsq_hqvv": "55",
    ":@computed_region_r6rf_p9et": "36",
    ":@computed_region_rayf_jjgk": "295",
    "arrests": "1",
    "county_code": "44",
    "county_code_text": "44",
    "county_name": "Mifflin",
    "fips_county_code": "087",
    "fips_state_code": "42",
    "incident_count": "1",
    "lat_long": {
      "type": "Point",
      "coordinates": [
        -77.620031,
        40.612749
      ]
    }

Мне удалось выбрать нужные столбцы, за исключением того, что у меня проблемы с "lat_long".Пока мой код выглядит следующим образом:

# PRINTS OUT SPECIFIED COLUMNS
col_titles = ['county_name', 'incident_count', 'lat_long']
df = df.reindex(columns=col_titles)

Однако 'lat_long' добавляется к фрейму данных следующим образом: {'type': 'Point', 'coordinates': [-75.71107, 4...

Я подумал, как только понял, как правильно добавить координаты вЗатем в фрейме данных я бы создал два отдельных столбца, один для широты и один для долготы.

Буду признателен за любую помощь в этом вопросе.Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вот как вы можете это сделать:

df1 = pd.io.json.json_normalize(df)

pd.concat([df1, df1['lat_long.coordinates'].apply(pd.Series) \
  .rename(columns={0: 'lat', 1: 'long'})], axis=1) \
  .drop(columns=['lat_long.coordinates', 'lat_long.type'])
0 голосов
/ 13 февраля 2019

Если я не неправильно понял ваши требования , вы можете попробовать этот способ с помощью json_normalize .Я только что добавил демо для одного json, вы можете использовать apply или lambda для нескольких наборов данных.

import pandas as pd
from pandas.io.json import json_normalize
df = {":@computed_region_amqz_jbr4":"587",":@computed_region_d3gw_znnf":"18",":@computed_region_nmsq_hqvv":"55",":@computed_region_r6rf_p9et":"36",":@computed_region_rayf_jjgk":"295","arrests":"1","county_code":"44","county_code_text":"44","county_name":"Mifflin","fips_county_code":"087","fips_state_code":"42","incident_count":"1","lat_long":{"type":"Point","coordinates":[-77.620031,40.612749]}}

df = pd.io.json.json_normalize(df)
df_modified = df[['county_name', 'incident_count', 'lat_long.type']] 
df_modified['lat'] = df['lat_long.coordinates'][0][0]
df_modified['lng'] = df['lat_long.coordinates'][0][1]
print(df_modified)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...