首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将嵌套字典与.map一起用于潘达斯系列?pd.Series([]).map

如何将嵌套字典与.map一起用于潘达斯系列?pd.Series([]).map
EN

Stack Overflow用户
提问于 2017-07-19 00:22:21
回答 1查看 621关注 0票数 1

我正在尝试map一个系列的某些值,同时保持其他值不变。在这种情况下,我需要更改dmso --> dmso-2naoh --> naoh-2water --> water-2,但是我得到了一个KeyError

首先,我做了一个布尔语句,看看它是否是感兴趣的,如果True然后使用这个字典,如果False然后返回x。我可以手动进入并更改它们,但是编程很有趣,我无法理解为什么这个逻辑不能工作。

代码语言:javascript
复制
# A sample of the series
Se_data = pd.Series({
    'DMSO_S43': 'dmso',
    'DMSO_S44': 'dmso',
    'DOXYCYCLINE-HYCLATE_S25': 'doxycycline-hyclate',
    'DOXYCYCLINE-HYCLATE_S26': 'doxycycline-hyclate'
})

# This boolean works
Se_data.map(lambda x: x in {"dmso", "naoh", "water"})
# DMSO_S43                          True
# DMSO_S44                          True
# DOXYCYCLINE-HYCLATE_S25          False
# DOXYCYCLINE-HYCLATE_S26          False

# This dictionary on the boolean works
Se_data.map(lambda x: {True: "control", False: x}[x in {"dmso", "naoh", "water"}])
# DMSO_S43                                           control
# DMSO_S44                                           control
# DOXYCYCLINE-HYCLATE_S25                doxycycline-hyclate
# DOXYCYCLINE-HYCLATE_S26                doxycycline-hyclate

# This nested dictionary isn't working
Se_data.map(lambda x: {
    True: {"dmso": "dmso-2", "naoh": "naoh-2", "water": "water-2"}[x],
    False: x
}[x in {"dmso", "naoh", "water"}])
# KeyError: 'doxycycline-hyclate'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 01:08:30

如果我理解正确,你可以简单地做

代码语言:javascript
复制
Se_data.replace({
    'dmso': 'dmso-2',
    'naoh': 'naoh-2',
    'water': 'water-2',
})

这将使所有其他值保持不变。

值得注意的是,您的代码不起作用,因为表达式

代码语言:javascript
复制
{"dmso": "dmso-2", "naoh": "naoh-2", "water": "water-2"}[x]

是为所有x计算的,而不仅仅是x in {"dmso", "naoh", "water"}。Python字典中的值并不像您所期望的那样是短路或懒惰地计算的。你本可以这样做的

代码语言:javascript
复制
Se_data.map(lambda x: {
    "dmso": "dmso-2",
    "naoh": "naoh-2",
    "water": "water-2"
}[x] if x in {"dmso", "naoh", "water"} else x)

代码语言:javascript
复制
Se_data.map(lambda x: {
    "dmso": "dmso-2",
    "naoh": "naoh-2",
    "water": "water-2"
}.get(x, x))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45179079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档