将字符串与查找表进行比较并执行替换

2024-04-23 13:59:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想迭代Python dataframe中的一个值字符串,并将该字符串中的每个值与查找表中的键进行比较。如果匹配,我们将替换为查找表中的值

数据帧如下所示:

index   String
1       ['a','b','c']
2       ['d','e','f','g','h']
3       ['i','j']

查找表如下所示:

key  value
---  -----
a    apple
b    book
c    clock
d    duck
e    else
f    far
g    girl
h    hour
i    ink
j    juice

预期结果应如下所示:

index   String
1      ['apple','book','clock']
2      ['duck','else','far','girl','hour']
3      ['ink','juice']

我知道我应该使用isin()函数来检查第一列中的值是否存在,但现在已经知道如何进行替换。有什么建议吗


Tags: 数据字符串appledataframestringindexelsejuice
3条回答

以下方面应起作用:

my_dict=pd.Series(lookuptable.value.values,index=lookuptable.key).to_dict()
df.String=df.String.apply(lambda x:[my_dict[i] for i in x])

我看到其他人在发布答案方面击败了我,但到目前为止,他们都没有考虑到字符串可能不在查找表中的情况,正如您在问题中提到的。下面的代码使用条件检查字符串是否在查找表中,如果不存在,则保持字符串不变

import pandas as pd

df = pd.DataFrame({"String": [['a', 'b', 'c'], ['d', 'e', 'f', 'g', 'h'], ['i', 'j'], ['k', 'l']]})
lookup = {'a': 'apple',
          'b': 'book',
          'c': 'clock',
          'd': 'duck',
          'e': 'else',
          'f': 'far',
          'g': 'girl',
          'h': 'hour',
          'i': 'ink',
          'j': 'juice'}

df['String'] = df['String'].apply(lambda string: [lookup[val] if val in lookup else val for val in string])

结果:

                          String
0           [apple, book, clock]
1  [duck, else, far, girl, hour]
2                   [ink, juice]
3                         [k, l]

试试这个:

df = pd.DataFrame({'String': [['a','b','c'], ['d','e','f','g','h'], ['i','j']]})

mymap = {
'a':   'apple',
'b':    'book',
'c':    'clock',
'd':    'duck',
'e':    'else',
'f':    'far',
'g':    'girl',
'h':    'hour',
'i':    'ink',
'j':    'juice'
}

df['String'] = df['String'].apply(lambda x: [mymap.get(i) for i in x])

df

输出:

                          String
0           [apple, book, clock]
1  [duck, else, far, girl, hour]
2                   [ink, juice]

相关问题 更多 >