我有以下问题。在我的 pandas 数据框中,我有几条记录(特别是其中的四个)(无意中)重复了,我用drop_duplicates(take_last = True)
. 现在,在其中一列中,我有一些字符串,我一直在尝试使用它来映射整数值,unique_vals, int_representation = np.unique(df.x, return_inverse = True)
但我发现由于某种原因,我的原始列中唯一字符串的数量和唯一整数值的数量int_representation
是不同的,这没有任何意义。
因此,我现在正在浏览原始数据框,试图了解其原因,而我发现在访问其中一个已删除副本所在的数据框索引时突然出现错误。这真的很奇怪,因为,比如说,df.xs(10)
有效,df.xs(11)
无效,并且df.xs(12)
再次有效。对于与已删除记录相对应的索引,这种情况恰好发生了四次。我还检查了当我不掉线时,问题就消失了。
我怀疑这就是为什么 np.unique 对其结果感到困惑的原因。这有什么意义吗?如何解决这个问题呢?任何帮助将非常感激。
这是我拥有的那种代码:
df_mwe = pd.DataFrame( {'one': [1,2,2,3,4,5], 'two': ['a','b','c','d','d','d']} )
df_mwe
one two
0 1 a
1 2 b
2 2 c
3 3 d
4 4 d
5 5 d
unique_vals, keys = np.unique( df_mwe['two'], return_inverse = True )
并按预期keys
返回array([0, 1, 2, 3, 3, 3])
。现在,让我们从第一列中删除重复项:
df_mwe = df_mwe.drop_duplicates(cols='one', take_last = True)
df_mwe
one two
0 1 a
2 2 c
3 3 d
4 4 d
5 5 d
和
unique_vals, keys = np.unique( df_mwe['two'], return_inverse = True )
产量keys
等于array([0, 1, 2, 3, 3])
,这是错误的,我怀疑这与1
框架中现在缺少索引有关。
编辑:杰夫的回答放在一边,添加这样的行:
df_mwe.index = range(0,np.size(df_mwe['one']))
删除重复项后,也可以完成这项工作。