如何替换熊猫数据框中的数值?

时间:2019-07-10 03:09:13

标签: python pandas csv

例如,我有数千行,其中之一是列“ cow_ID”,其中每个母牛ID有几行。我想将这些ID替换为从1开始的数字,以便于记住。

df['cow_id'].unique().tolist()

导致:

 5603,
 5606,
 5619,
 4330,
 5587,
 4967,
 5554,
 4879,
 4151,
 5501,
 4723,
 4908,
 3963,
 4023,
 4573,
 3986,
 5668,
 4882,
 5645,
 5548

如何将每个唯一ID更改为新数字,例如:

5603 -> 1
5606 -> 2

3 个答案:

答案 0 :(得分:3)

尝试看看

df.groupby('cow_id').ngroup()+1

或尝试pd.factorize

pd.factorize(df['cow_id'])[0]+1

与文档中一样,pd.factorize将对象编码为枚举类型或分类变量。

  
    

请注意,有两个pd.factorize返回变量

  

答案 1 :(得分:1)

您要查找的内容应使用分类编码标记。 python中的sklearn库具有许多预处理方法,其中标签编码器应为您完成这项工作。请参考此链接。 https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html#sklearn.preprocessing.LabelEncoder

还请记住,使用这样的编码可能会在您的数据集中引入一些偏差,因为某些算法可以将一个标签视为高于另一个标签,即1> 2> ...> 54。 请参阅此博客以了解有关编码以及何时使用什么的更多信息。 https://towardsdatascience.com/encoding-categorical-features-21a2651a065c

如果您有任何疑问,请告诉我。

答案 2 :(得分:1)

这是使用pandas.Categorical的结果。好处是您可以保留原始数据并可以来回翻转。在这里,我创建了一个名为“ c”的变量,该变量既包含原始类别又包含新代码

enter image description here