Панды: Проверьте, существует ли столбец dataframe в объекте json - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть объект json, который называется «страны», как показано ниже, со списком кодов ISO всех стран:

countries = [{"name":"Afghanistan","alpha-2":"AF","country-code":"004"},{"name":"Åland Islands","alpha-2":"AX","country-code":"248"},{"name":"Albania","alpha-2":"AL","country-code":"008"},{"name":"Algeria","alpha-2":"DZ","country-code":"012"}]

У меня есть информационный фрейм pandas со столбцом 'Country':

Country
--------
AU
AL
DZ

Как проверить, существует ли какая-либо строка в столбце «Страна» в столбце «альфа-2» объекта json, и вывести ошибку, если она не существует?

Когда я пробую приведенный ниже код, я не получаю никакой ошибки и не печатает ничего.

if df['Country'].any() in [x['alpha-2'] for x in countries]:
    print "Country code exists"

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Поскольку у вас уже есть DataFrame pandas, вы можете преобразовать объект JSON в DataFrame, выполнить объединение inner обоих с помощью pd.merge , а затем проверить, является ли возвращенный DataFrame пустым илинет.

>>> import pandas as pd
>>> countries_base = [{'Country': 'AU'}, {'Country': 'AL'}, {'Country': 'DZ'}]
>>> countries = [{"name":"Afghanistan","alpha-2":"AF","country-code":"004"},{"name":"Åland Islands","alpha-2":"AX","country-code":"248"},{"name":"Albania","alpha-2":"AL","country-code":"008"},{"name":"Algeria","alpha-2":"DZ","country-code":"012"}]
>>> df1 = pd.DataFrame(countries_base)
>>> df2 = pd.DataFrame(countries)
>>> m = pd.merge(df1, df2, how='inner', left_on='Country', right_on='alpha-2')
>>> if m.empty:
>>>     print('Country code does not exist') 
>>> else:
>>>     print('Country code exists')
0 голосов
/ 09 ноября 2018

Вы могли бы сделать

if set(x['alpha-2'] for x in countries).intersection(df.Country):
    print('Country code exists')

или, ближе по духу к тому, что вы пытаетесь (но с совершенно другими характеристиками производительности),

if df.Country.isin(x['alpha-2'] for x in countries).any():
    print('Country code exists')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...