Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用数据帧的公共键填充多个字典?_Python_Pandas - Fatal编程技术网

Python 如何使用数据帧的公共键填充多个字典?

Python 如何使用数据帧的公共键填充多个字典?,python,pandas,Python,Pandas,我有一个字典列表,其中键相同,但每个字典中的值不同,并且严格保留每个字典的顺序。我试图找到一个自动解决方案,将这些字典作为新列填充到pandas dataframe中,但没有得到预期的输出 gist原始数据 这是我掌握的数据 我的尝试 这里是我尝试用相同的键但不同的值填充多个字典的二进制值,我的目标是写下方便的函数来矢量化代码。这是 我的代码可以工作,但它不是矢量化的,我认为效率不高。我想知道我怎样才能使这几行简单的函数。有什么想法吗?我们如何尽可能有效地做到这一点 以下是我的电流和所需的输出:

我有一个字典列表,其中键相同,但每个字典中的值不同,并且严格保留每个字典的顺序。我试图找到一个自动解决方案,将这些字典作为新列填充到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])