Python 如何使用数据帧的公共键填充多个字典?
我有一个字典列表,其中键相同,但每个字典中的值不同,并且严格保留每个字典的顺序。我试图找到一个自动解决方案,将这些字典作为新列填充到pandas dataframe中,但没有得到预期的输出 gist原始数据 这是我掌握的数据 我的尝试 这里是我尝试用相同的键但不同的值填充多个字典的二进制值,我的目标是写下方便的函数来矢量化代码。这是 我的代码可以工作,但它不是矢量化的,我认为效率不高。我想知道我怎样才能使这几行简单的函数。有什么想法吗?我们如何尽可能有效地做到这一点 以下是我的电流和所需的输出:Python 如何使用数据帧的公共键填充多个字典?,python,pandas,Python,Pandas,我有一个字典列表,其中键相同,但每个字典中的值不同,并且严格保留每个字典的顺序。我试图找到一个自动解决方案,将这些字典作为新列填充到pandas dataframe中,但没有得到预期的输出 gist原始数据 这是我掌握的数据 我的尝试 这里是我尝试用相同的键但不同的值填充多个字典的二进制值,我的目标是写下方便的函数来矢量化代码。这是 我的代码可以工作,但它不是矢量化的,我认为效率不高。我想知道我怎样才能使这几行简单的函数。有什么想法吗?我们如何尽可能有效地做到这一点 以下是我的电流和所需的输出:
因为我得到了正确的输出,但这里的代码效率不高。这是我当前在上的输出。如果您将词典重组为一个词典词典,您可以将其一行:
for keys in values.keys():
dat[keys]=dat['code'].astype(str).map(values[keys])
完整代码:
values = {"typ" :{
'20230' : 'A',
'20130' : 'A',
'20220' : 'A',
'20120' : 'A',
'20329' : 'A',
'20322' : 'A',
'20321' : 'B',
'20110' : 'B',
'20210' : 'B',
'20311' : 'B'
} ,
"anim" :{
'20230' : 'AOB',
'20130' : 'AOB',
'20220' : 'AOB',
'20120' : 'AOB',
'20329' : 'AOC',
'20322' : 'AOC',
'20321' : 'AOC',
'20110' : 'AOB',
'20210' : 'AOB',
'20311' : 'AOC'
} ,
"bov" :{
'20230' : 'AOD',
'20130' : 'AOD',
'20220' : 'AOD',
'20120' : 'AOD',
'20329' : 'AOE',
'20322' : 'AOE',
'20321' : 'AOE',
'20110' : 'AOD',
'20210' : 'AOD',
'20311' : 'AOE'
} ,
"cat" :{
'20230' : 'AOF',
'20130' : 'AOG',
'20220' : 'AOF',
'20120' : 'AOG',
'20329' : 'AOF',
'20322' : 'AOF',
'20321' : 'AOF',
'20110' : 'AOG',
'20210' : 'AOF',
'20311' : 'AOG'
} ,
"foo" :{
'20230' : 'AOL',
'20130' : 'AOL',
'20220' : 'AOM',
'20120' : 'AOM',
'20329' : 'AOL',
'20322' : 'AOM',
'20321' : 'AOM',
'20110' : 'AOM',
'20210' : 'AOM',
'20311' : 'AOM'
}
}
import pandas as pd
dat= pd.read_csv('old_data.csv', encoding='utf-8')
for keys in values.keys():
dat[keys]=dat['code'].astype(str).map(values[keys])
您不能发布完整的数据和完整的代码,并期望人们为您检查和调试它。当问你的问题时,你必须提供一个代表你实际问题的小例子。通过这种方式,你也会强迫自己充分理解你的问题。看一看我的@Erfan,我的代码中没有bug,只是想简化将multople字典填充到pandas的过程。如果我把我当前的代码发布到SO,这将是一篇很长的文章,可能会给SO社区带来负担。如何简化当前的尝试?有什么想法吗?@Erfan是正确的,如果您使用read\u excel,则无法复制您的代码。将示例简化为可以复制/粘贴到编辑器并立即从那里开始工作的内容,然后人们可以复制它并从那里开始工作。所有链接都已断开,请提供一个链接。您不能在pandas.read_csv中使用dict,甚至仅使用dtype=str来指定数据类型吗?
values = {"typ" :{
'20230' : 'A',
'20130' : 'A',
'20220' : 'A',
'20120' : 'A',
'20329' : 'A',
'20322' : 'A',
'20321' : 'B',
'20110' : 'B',
'20210' : 'B',
'20311' : 'B'
} ,
"anim" :{
'20230' : 'AOB',
'20130' : 'AOB',
'20220' : 'AOB',
'20120' : 'AOB',
'20329' : 'AOC',
'20322' : 'AOC',
'20321' : 'AOC',
'20110' : 'AOB',
'20210' : 'AOB',
'20311' : 'AOC'
} ,
"bov" :{
'20230' : 'AOD',
'20130' : 'AOD',
'20220' : 'AOD',
'20120' : 'AOD',
'20329' : 'AOE',
'20322' : 'AOE',
'20321' : 'AOE',
'20110' : 'AOD',
'20210' : 'AOD',
'20311' : 'AOE'
} ,
"cat" :{
'20230' : 'AOF',
'20130' : 'AOG',
'20220' : 'AOF',
'20120' : 'AOG',
'20329' : 'AOF',
'20322' : 'AOF',
'20321' : 'AOF',
'20110' : 'AOG',
'20210' : 'AOF',
'20311' : 'AOG'
} ,
"foo" :{
'20230' : 'AOL',
'20130' : 'AOL',
'20220' : 'AOM',
'20120' : 'AOM',
'20329' : 'AOL',
'20322' : 'AOM',
'20321' : 'AOM',
'20110' : 'AOM',
'20210' : 'AOM',
'20311' : 'AOM'
}
}
import pandas as pd
dat= pd.read_csv('old_data.csv', encoding='utf-8')
for keys in values.keys():
dat[keys]=dat['code'].astype(str).map(values[keys])