Как выделить подсписок из списка и добавить данные в другой список - PullRequest
0 голосов
/ 26 сентября 2019

input in which the latitude column needs to be splited

Мне нужно создать еще один кадр данных, который имеет формат столбца

df_codata["Latlong"]=  [{"__type":"GeoPoint","latitude":x,"longitude":y}]

Как видно на изображении, «Latlong» содержит"широта", которая имеет подсписок.Мне нужно создать фрейм данных, который даст мне вывод, например, для одного «C_ID» он имеет несколько подсписков «широты», которые я хочу добавить, чтобы добавить первый номер подсписка в «широте» фрейма данных df_codata и второй номер подсписка в «долготе»«из данных.Желаемый результат прилагается ниже: Desired output Пожалуйста, предложите для проблемы.Я не могу разделить подсписок и вставить в него два столбца "широта" и "долгота"

1 Ответ

0 голосов
/ 26 сентября 2019

Вы можете выполнить некоторую предварительную обработку данных, чтобы получить желаемый результат.Вот одно из возможных решений для решения вашей задачи:

import pandas as pd
import json

def extend_coordinates(coordinates, c_id, geo_type):
    result = []
    for elem in coordinates:
        if len(elem) == 2:
            # normal case
            latitude, longitude = elem
        else:
            latitude, longitude = [None, None]
        result.append([c_id, geo_type, latitude, longitude])
    return result

data_json = [
    {
        'C_ID' : '1',
        'Latlong' : {
            '__type' : 'GeoPoint',
            'latitude' : [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
        }
    },
    {
        'C_ID' : '2',
        'Latlong' : {
            '__type' : 'GeoPoint',
            'latitude' : [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
        }
    },
    {
        'C_ID' : '3',
        'Latlong' : {
            '__type' : 'GeoPoint',
            'latitude' : [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
        }
    }]

data = pd.read_json(json.dumps(data_json))
data['Common'] = data.apply(lambda x: extend_coordinates(coordinates=x['Latlong'].get('latitude', [None, None]),
                                                         c_id=x['C_ID'],
                                                  geo_type=x['Latlong'].get('__type', None)), axis=1)
data_ext = pd.DataFrame(np.concatenate(data['Common']), 
                        columns=['C_ID', '__type', 'latitude', 'longitude'])

# if data_ext dataframe is not enough, you can combine data to your desired output
data_ext['Latlong'] = data_ext.apply(lambda x: {'__type': x['__type'], 
                                                'latitude': x['latitude'], 
                                                'longitude': x['longitude']}, axis=1)
result = data_ext[['C_ID', 'Latlong']]
del data_ext, data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...