将Dict中的键与字符串

时间:2018-05-02 16:16:58

标签: python pandas csv dictionary

你好漂亮的人!

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

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

我试图找到迭代数据集/帧的最pythonic方式,并返回任何字符串与dict的值匹配。

因此,对于数字1,我​​想在c列中返回Sauce,并且2' barr'在相应的行但在col 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 :(得分:3)

您只能使用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']

答案 1 :(得分:2)

因此,如果您可以逐行读取csv(或将其拆分到可以访问b列中值的位置),下面将为您提供B列中与键匹配的句子中所有值的列表词典。

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

它的工作原理是使用word_dict = {'Awesome' : 'Sauce', 'Foo' : 'Barr'} s1 = 'This is Awesome' matches = [x for x in s1.split() if x in dict.keys()] >> matches = ['Awesome'] 将句子分成单词。然后列表推导迭代生成的单词列表并检查它是否是字典中的键,如果它是键,则将其添加到新列表中,如果不是键,则将其忽略。

答案 2 :(得分:1)

这样的东西?

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))

答案 3 :(得分:1)

如果要显式迭代字典和Dataframe,可以使用:

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])