Python 通过迭代替换数据帧中的数组值

Python 通过迭代替换数据帧中的数组值,python,arrays,pandas,iteration,Python,Arrays,Pandas,Iteration,我正在使用一个Pandas数据帧,该数据帧在数组中有一列条目,例如以下示例: user_id tags 0 1 [a,b,c] 1 2 [a,b,d] 2 3 [b,c] ... n n [a,d] 我有一些与JSON对象中的简化标记相关的标记ID,我正试图用以下方法将这些条目替换为它们的非简化变体: for user_tags in dataset['tags']: for tag

我正在使用一个Pandas数据帧,该数据帧在数组中有一列条目,例如以下示例:

    user_id    tags
0      1       [a,b,c]
1      2       [a,b,d]
2      3       [b,c]
...
n      n       [a,d]
我有一些与JSON对象中的简化标记相关的标记ID,我正试图用以下方法将这些条目替换为它们的非简化变体:

for user_tags in dataset['tags']:
    for tag in user_tags:
        for full_tag in UUIDtags['tags_full']:
            if full_tag['id'] == tag:
                tag = entry['name']
id
name
是JSON对象中相应的简化标记和完整标记名

但是,这不会改变执行时的值;是否有我缺少的方法来替换这些值?恐怕我将替换整个数组,而不是替换单个条目

谢谢大家!

编辑:JSON对象(
UUIDtags
)所包含内容的示例

{
    "tags_full": [{
        "id": "a",
        "name": "Alpha"
    }, {
        "id": "b",
        "name": "Beta"
....
创建示例数据

>>> df = pd.DataFrame({'tags':[list(['a', 'b', 'c']), 
list(['a', 'b', 'd']), list(['b', 'c'])], 'user_id': [i for i in range(1,4)]})

>>> df
        tags  user_id
0  [a, b, c]        1
1  [a, b, d]        2
2     [b, c]        3
生成一个替换字典,其中字母作为键,完整标记作为值

>>> replace_dict = {'a': 'Alpha', 'b': 'Beta', 'Charlie': 'c', 'Delta': 'd'}
好的,回到解决方案…使用
replacement\u dict
中的相应值对每行中的行和字母进行迭代替换

>>> for row in range(len(df)):
...     for tag in range(len(df.loc[row, 'tags'])):
...             df.loc[row, 'tags'][tag] = replace_dict[df.loc[row, 'tags'][tag]]
... 
结果如下

>>> df
                     tags  user_id
0  [Alpha, Beta, Charlie]        1
1    [Alpha, Beta, Delta]        2
2         [Beta, Charlie]        3

旁注
replacement\u dict
的创建是基于我的示例数据中出现的字母临时创建的替换词典。要为完整数据生成这样一个替换字典,您可以这样做

例如,假设
UUIDtags
是完整的JSON对象

>>> UUIDtags = {'tags_full': [{'id':'a', 'name':'Alpha'}, {'id':'b', 'name':'Beta'}]}
我们可以像这样生成一个替换dict

>>> uuidtags_dict = {}
>>> for tag in UUIDtags['tags_full']:
...     uuidtags_dict[tag['id']] = tag['name']
... 
>>> uuidtags_dict
{'a': 'Alpha', 'b': 'Beta'}

这一代替换字典将根据您在编辑中提供的示例扩展到您的整个JSON对象。

您可以发布其他数据
full\t
UUIDtags
的样子吗?很难在只有一半信息的情况下测试想法…对不起!我修正了我问题中的一些不一致之处,谢谢。谢谢你的详细回答!我想我完全理解您的处理方式,但我收到了错误消息
keyrerror:“标签[7]在执行时不在[index]
中;我正在调试错误。@Kam您可能需要重置
数据集上的索引
dataset.reset\u index(inplace=True)
你说得对,我还以为里面有呢!谢谢-现在很有魅力!