【发布时间】:2018-06-23 05:28:27
【问题描述】:
我得到了一个包含数百万个条目的数据框,其中一列是“TYPE”(字符串)。这个特定列共有 400 个值,我想用从 1 到 400 的整数 id 替换这些值。我还想导出这个字典 'TYPE' => id 以供将来参考。我尝试使用 to_dict ,但没有帮助。无论如何都可以做到这一点?
【问题讨论】:
标签: python-2.7 pandas numpy
我得到了一个包含数百万个条目的数据框,其中一列是“TYPE”(字符串)。这个特定列共有 400 个值,我想用从 1 到 400 的整数 id 替换这些值。我还想导出这个字典 'TYPE' => id 以供将来参考。我尝试使用 to_dict ,但没有帮助。无论如何都可以做到这一点?
【问题讨论】:
标签: python-2.7 pandas numpy
选项1:您可以使用pd.factorize:
df['new'] = pd.factorize(df['str_col'])[0]+1
选项 2: 使用类别 dtype:
df['new'] = df['str_col'].astype('category').cat.codes+1
或者甚至更好地将其转换为分类 dtype:
df['str_col'] = df['str_col'].astype('category')
当您需要使用数字时,只需使用类别代码:
df['str_col'].cat.codes
感谢@jezrael for extending the answer - 创建字典:
cats = df['str_col'].cat.categories
d = dict(zip(cats, range(1, len(cats) + 1)))
PS 类别 dtype 也非常节省内存
【讨论】:
cats = df['str_col'].cat.categories d = dict(zip(cats, range(1, len(cats) + 1)))