Проверьте столбец dataframe, чтобы увидеть, является ли bool, если True / False, если False, геокодировать только эти значения - PullRequest
0 голосов
/ 12 июня 2018

Я использую [библиотеку API геокодера Python] [1].У меня есть столбец данных pandas логического True / False, основанный на том, геокодирован ли у меня этот конкретный адрес или нет.Есть ли способ изменить мой существующий код на геокодирование, основываясь на том, есть ли у меня геокодированный код или нет?

Сейчас все, что он делает, это печатает выражение True, а затем геокодирует все, независимо от того, что у меня есть логическое значение.Помогите, пожалуйста!

Вот еще один способ выразить это:

У меня есть информационный фрейм твитов.Если твит был геокодирован, я пометил этот твит истиной (если он был геокодирован) или ложным (если он не был геокодирован).То, что я пытаюсь сделать, это проверить, является ли столбец True, распечатать эту строку.Иначе, если этот ряд имеет значение False, отправьте его в цикл for для геокодирования.Я отредактирую оригинальный пост для входа.

Вот мой существующий код:

for d in tweets2['Exist']:
    if d is True:
        print d
    elif d.any() is False:
        coord = []
        for index, row in tweets2.iterrows():
            print(row['location_x'])
            time.sleep(1.01)
            g = geocoder.osm(row['location_x'])
            geo = g.latlng
            print(geo)
            coord.append(geo)
    else:
        pass 

Вот пример файла JSON в качестве ввода:

{
"data": [
    {
        "user_id": 3299796214, 
        "features": {
            "screen_name": "SaveOurSparrows", 
            "text": "Details confirmed for inquiry into #INEOS #Derbyshire #Fracking site! \n\nAnti Fracking, #keepitintheground #wesaidno\u2026", 
            "location": "West Pennine Moors AONB SSSI", 
            "tweets": 3, 
            "geo_type": "User location", 
            "primary_geo": "West Pennine Moors AONB SSSI", 
            "id": 3299796214, 
            "name": "SaveOurSparrows",
            "Exist": "True"
        }
    }, 
    {
        "user_id": 3302831409, 
        "features": {
            "screen_name": "ProjectLower", 
            "text": "Cutting down on energy costs is the dream for many #smallbusinesses, but to put ideas into practice isn\u2019t always ea\u2026", 
            "location": "Manchester", 
            "tweets": 1, 
            "geo_type": "User location", 
            "primary_geo": "Manchester", 
            "id": 3302831409, 
            "name": "Project Lower",
            "Exist": "False"
        }
    }, 
    {
        "user_id": 2205129714, 
        "features": {
            "screen_name": "AmbCanHaiti", 
            "text": "Petit-d\u00e9jeuner causerie le mercredi 28 mars 2018 \u00e0 l'h\u00f4tel Montana sur l'\u00e9nergie #micror\u00e9seaux #microgrids\u2026", 
            "location": "Haiti", 
            "tweets": 1, 
            "geo_type": "User location", 
            "primary_geo": "Haiti", 
            "id": 2205129714, 
            "name": "Canada en Ha\u00efti",
            "Exist": "False"
        }
    }
 ]

}

1 Ответ

0 голосов
/ 12 июня 2018

Самый простой способ - просмотреть ваш набор данных, и, если ключа coords нет, добавьте его:

for data in your_data_set['data']:
    data['coords'] = data.setdefault('coords',  geocoder.osm(data'location_x']).latlang)

Затем преобразуйте его в фрейм данных.

Если у вас уже есть данные в качестве кадра данных:

df.loc[df['coords'] == False, 'coords'] = geocoder.osm(df['location_x']).latlang
...