栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-通过字典有效替换熊猫系列中的值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-通过字典有效替换熊猫系列中的值

一个简单的解决方案是选择一种方法,该方法取决于对字典键完全覆盖值的估计。

一般情况

  • df[‘A’].map(d)如果所有值都已映射,则使用;否则 要么
  • df[‘A’].map(d).fillna(df[‘A’]).astype(int)如果映射的值大于5%,则使用。

  • d中的值很少,例如<5%

  • 采用

    df['A'].replace(d)

〜5%的“交叉点”特定于以下基准测试。

有趣的是,

map
在任何一种情况下,简单的列表理解通常都表现不佳。

标杆管理

import pandas as pd, numpy as npdf = pd.Dataframe({'A': np.random.randint(0, 1000, 1000000)})lst = df['A'].values.tolist()##### TEST 1 - Full Map #####d = {i: i+1 for i in range(1000)}%timeit df['A'].replace(d)    # 1.98s%timeit df['A'].map(d)        # 84.3ms%timeit [d[i] for i in lst]   # 134ms##### TEST 2 - Partial Map #####d = {i: i+1 for i in range(10)}%timeit df['A'].replace(d)    # 20.1ms%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms%timeit [d.get(i, i) for i in lst]       # 243ms

说明

之所以

s.replace
这么慢,是因为它所做的不仅仅是映射字典。它处理一些极端情况和可能很少见的情况,这些情况通常在任何情况下都应格外小心。

这是

replace()in
的摘录
pandasgeneric.py

items = list(compat.iteritems(to_replace))keys, values = zip(*items)are_mappings = [is_dict_like(v) for v in values]if any(are_mappings):    # handling of nested dictionarieselse:    to_replace, value = keys, valuesreturn self.replace(to_replace, value, inplace=inplace,         limit=limit, regex=regex)

似乎涉及许多步骤:

  • 将字典转换为列表。
  • 遍历列表并检查嵌套字典。
  • 将键和值的迭代器输入到替换函数中。

可以将其与来自map()中的更精简的代码进行比较pandasseries.py:

if isinstance(arg, (dict, Series)):    if isinstance(arg, dict):        arg = self._constructor(arg, index=arg.keys())    indexer = arg.index.get_indexer(values)    new_values = algos.take_1d(arg._values, indexer)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/400296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号