python - 如何将嵌套字典与 .map 用于 Pandas 系列? pd.Series([]).map

标签 python pandas dictionary vector mapping

我正在尝试映射一系列值的某些值,同时保持其他值不变。在本例中,我要更改 dmso --> dmso-2naoh --> naoh-2water --> water-2 但我收到了 KeyError

首先,我正在执行一个 bool 语句来查看它是否是任何感兴趣的,如果 True 则使用此字典,如果 False 则返回 x。我可以手动进入并更改它们,但编程很有趣,我不明白为什么这个逻辑不起作用。

# 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'

最佳答案

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

Se_data.replace({
    'dmso': 'dmso-2',
    'naoh': 'naoh-2',
    'water': 'water-2',
})

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

<小时/>

无论如何,您的代码无法正常工作,因为表达式

{"dmso": "dmso-2", "naoh": "naoh-2", "water": "water-2"}[x]

针对所有 x 进行评估,而不仅仅是 {"dmso", "naoh", "water"} 中的 x。 Python 字典中的值不会像您预期的那样被短路或延迟计算。你可以做类似的事情

Se_data.map(lambda x: {
    "dmso": "dmso-2",
    "naoh": "naoh-2",
    "water": "water-2"
}[x] if x in {"dmso", "naoh", "water"} else x)

Se_data.map(lambda x: {
    "dmso": "dmso-2",
    "naoh": "naoh-2",
    "water": "water-2"
}.get(x, x))

关于python - 如何将嵌套字典与 .map 用于 Pandas 系列? pd.Series([]).map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179079/

相关文章:

python - 包含 CSV 文件的字典列表中元素的平均值

python 2.7 - 运行子进程并在用户时间超过最大时间时终止它

python - Django 自动将超链接 url 附加到现有 url

python - 在 Python 中从 opencv 3 创建类 Rect 的实例

python - Pandas DataFrame Groupby 如何将组作为列表获取并获得特定列的平均值

python - 字典中出现次数最多的值

c++ - 当键是一对时在 map 中使用 .find() 函数

python - 使用 cherrypy 流式传输文件

python - 创建一个列,该列为另一行的更改增加值

python - 腐败的可能性 : Reading Excel Files with Pandas