如何使用 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:如何在数据框的列中拆分已排序的字典