如何使用 Pandas 数据框的常用键填充多个字典?

Posted

技术标签:

【中文标题】如何使用 Pandas 数据框的常用键填充多个字典?【英文标题】:How to populate multiple dictionary with common keys to pandas dataframe? 【发布时间】:2020-02-03 20:42:49 【问题描述】:

我有一个字典列表,其中键相同但每个字典中的值不同,并且每个字典的顺序都严格保留。我正在尝试找到一种自动解决方案来将这些字典作为新列填充到 pandas 数据框,但没有得到预期的输出。

关于要点的原始数据

这是我在old data on gist 上的数据。

我的尝试

这是我尝试用相同的键但不同的值(二进制值)填充多个字典,我的目标是我想写下方便的函数来矢量化代码。这里是my inefficient code but works on gist

import pandas as pd

dat= pd.read_csv('old_data.csv', encoding='utf-8')

dat['type']=dat['code'].astype(str).map(typ)
dat['anim']=dat['code'].astype(str).map(anim)
dat['bovin'] = dat['code'].astype(str).map(bov)
dat['catg'] = dat['code'].astype(str).map(cat)
dat['foot'] = dat['code'].astype(str).map(foo)

我的代码可以工作,但它不是矢量化的(我认为效率不高)。我想知道如何使这几行简单的功能。任何的想法?我们如何尽可能高效地做到这一点?

这是我当前和想要的输出:

因为我得到了正确的输出,但这里的代码效率不高。这是我在gist上的当前输出

【问题讨论】:

您不能发布您的完整数据和完整代码,并期望人们为您浏览并调试它。当你问你的问题时,你提供了一个代表你实际问题的小例子。这样你也强迫自己完全理解你的问题。看看我的一个questions @Erfan 我的代码中没有错误,只是想简化将多个字典填充到熊猫的过程。如果我将我当前的代码发布到SO,这将是一个很长的帖子,可能会给SO 社区带来负担。如何简化我当前的尝试?有什么想法吗? @Erfan 是正确的,如果您使用 read_excel,则无法重现您的代码。将示例简化为可以复制/粘贴到编辑器并立即从那里工作的东西,然后人们可以复制它并从那里开始工作。 所有链接失效,请提供minimal reproducible example。 【参考方案1】:

如果你把你的字典重组成一本字典,你可以把它排成一行:

 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])

【讨论】:

您不能在pandas.read_csv() 中使用字典,甚至只是dtype=str 指定数据类型吗?

以上是关于如何使用 Pandas 数据框的常用键填充多个字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 pandas 数据框列中的字典元素并对其进行迭代以创建填充有各自值的新列?

Python Pandas:如何在数据框的列中拆分已排序的字典

将pandas数据帧转换为具有多个键的字典

使用 Excel Pandas 中的浮点值填充字典的问题

如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?

映射两个数据框以创建一个包含多个键值的字典 - Pandas