Python 通过迭代替换数据帧中的数组值
我正在使用一个Pandas数据帧,该数据帧在数组中有一列条目,例如以下示例: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
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)
你说得对,我还以为里面有呢!谢谢-现在很有魅力!