Используйте столбец JSON в шаблон, используя панды - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть данные в формате JSON. Ниже приведен пример этого.

[{
"Type": "Fruit",
"Names": "Apple;Orange;Papaya"

}, {
"Type": "Veggie",
"Names": "Cucumber;Spinach;Tomato"
}]

Я должен прочитать Имена и сопоставить каждый элемент Имен с колонкой в ​​другой df. Я застрял при преобразовании значения ключа Names в список, который можно использовать в Pattern. Код, который я пробовал,

df1 = pd.DataFrame(data)


PriList=df1['Names'].str.split(";", n = 1, expand = True)

Pripat = '|'.join(r"\b{}\b".format(x) for x in PriList)

df['Match'] = df['MasterList'].str.findall('('+ Pripat + ')').str.join(', ')

Проблема с Припатом. Его содержание составляет

\bApple, Orange\b

Если я дам имена в списке, как показано ниже

Prilist=['Apple','Orange','Papaya']

код работает нормально ...

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018
df2 = df1.loc[df1.Type.eq('Fruit')]
out_list=';'.join(df2['Names'].values).split(';')
#print(out_list)
['Apple', 'Orange', 'Papaya']
0 голосов
/ 12 ноября 2018

Вам нужно будет позвонить str.split, а затем сгладить результат, используя itertools.chain.

Сначала сделайте

df2 = df1.loc[df1.Type.eq('Fruit')]

Теперь

from itertools import chain
prilist = list(chain.from_iterable(df2.Names.str.split(';').values))

Также есть stack (что медленнее):

prilist = df2.Names.str.split(';', expand=True).stack().tolist()

print(prilist)
['Apple', 'Orange', 'Papaya']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...