【发布时间】:2013-06-29 20:28:58
【问题描述】:
我有以下问题。在我的 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 )
yields keys 等于 array([0, 1, 2, 3, 3]),这是错误的,我怀疑这与索引 1 现在在框架中丢失有关。
编辑: 杰夫的回答放在一边,添加这样的行:
df_mwe.index = range(0,np.size(df_mwe['one']))
删除重复项后,也可以完成这项工作。
【问题讨论】:
-
你能把你原来的框架和代码放上来复制吗?
-
在做之前,有没有可能是我丢帧后没有手动重新索引?
-
显示您的代码将有助于诊断问题。当您不期望时,您可能正在处理副本或就地执行操作
-
@Jeff,我编辑了我的问题。