Подберите ключ в Dict to String - PullRequest
0 голосов
/ 02 мая 2018

Здравствуйте, красивые люди!

dict = {'Awesome' : 'Sauce', 'Foo' : 'Barr'}

Col A Col B
1     'This is Awesome'
2     'I really foo him' 

Я пытаюсь найти наиболее питонический способ перебора набора данных / фрейма и возврата любой строки, совпадающей со значением dict.

поэтому для числа 1 я бы хотел вернуть Sauce в столбце c, например, и 2 'barr' в соответствующей строке, но в столбце c.

Я имею дело с файлом CSV / Excel, если это имеет значение.

Любая помощь будет оценена. Я счастлив использовать библиотеку Pandas и NP.

Редактировать для Вэнь Цзябао:

ID     Name of Course
0      Super Event Training: English Event...
1      Start with our Maths Training...
2      Live online Biology Training...
3      Maths throughout time...
4      Online Q&A Webinar: History..
5      Start with our Creative ...
6      Spring Conf with Author
7      Physics in our age ...
8      Spring Conf
9      Start with our educational items...
10     Education delivery in India...
11     English IELTS, Access to University..
12     Our Core Products for Empowerment..

У меня есть DF, подобный этому, который продолжается около 500 строк, которые я очищаю с помощью API, мне нужно преобразовать этот текст в свободной форме в значения, которые находятся в моем распоряжении. Я определил ключевые слова, которые я поместил в свои ключевые значения и присвоил значениям dict, чтобы мы могли анализировать данные.

Возможно, использование dict не лучший способ сделать это? Любые советы будут высоко ценится.

DN.

Ответы [ 4 ]

0 голосов
/ 02 мая 2018

Если вы хотите явно выполнить итерацию по словарю и кадру данных, вы можете использовать:

mapper = {'Awesome' : 'Sauce', 'Foo' : 'Barr'}

data = {"Col B": ["This is Awesome", "I really foo him"]}

df = pd.DataFrame(data)

for item in mapper:
    for i in range(len(df)):
        if item.lower() in df["Col B"].iloc[i].lower():
            print(mapper[item])
0 голосов
/ 02 мая 2018

Вы можете использовать только Python

[''.join(z) for z in [[y[1] if y[0] in x  else '' for x in df['Col B'] ] for y in d.items()]]
Out[22]: ['Sauce', 'Barr']
0 голосов
/ 02 мая 2018

Как то так?

def get_col3(text,d):
    ret = ""
    keys = list(d.keys())
    vals = list(d.values())
    for key in keys:
        if key.lower() in text.lower():
            idx = keys.index(key)
            ret+=vals[idx]+" "
    return ret

d = {'Awesome' : 'Sauce', 'Foo' : 'Barr'}

text1 = 'This is Awesome'
text2 =  'I really foo him'
text3 =  'That was Awesome foo to him'

print(get_col3(text3,d))
0 голосов
/ 02 мая 2018

Так что, если вы можете читать в CSV построчно (или разбивать его, чтобы получить доступ к значениям в столбце b) Ниже приведен список всех значений в предложении в столбце B, которые соответствуют ключу в словарь.

word_dict = {'Awesome' : 'Sauce', 'Foo' : 'Barr'}
s1 = 'This is Awesome'
matches = [x for x in s1.split() if x in dict.keys()]
>> matches = ['Awesome']

Работает, используя string.split(), чтобы разбить предложение на слова. Затем понимание списка перебирает итоговый список слов и проверяет, является ли он ключом в словаре; если это ключ, он добавляется в новый список, если не является ключом, он игнорируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...