python pandas删除记录后访问索引

2024-03-29 06:06:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题。在pandas数据框中,我有几个记录(特别是其中的4个)被(无意)复制了,我用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.唯一对结果感到困惑。有道理吗?如何解决这个问题?任何帮助都将不胜感激。在

这就是我的代码:

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]),如预期。现在,让我们从第一列中删除重复项:

^{pr2}$

以及

unique_vals, keys = np.unique( df_mwe['two'], return_inverse = True )

产生keys等于array([0, 1, 2, 3, 3]),这是错误的,我怀疑这与索引{}在帧中丢失这一事实有关。在

编辑: 杰夫的回答放在一边,加上这样一句话:

df_mwe.index = range(0,np.size(df_mwe['one']))

删除重复项后,也可以执行此操作。在


Tags: 数据truedfreturnnp记录原因keys
1条回答
网友
1楼 · 发布于 2024-03-29 06:06:46

使用序列的.values属性传递该序列。将序列传递给numpy函数应该与传递实际的底层数组相同(这正是.values提供给您的)。但是由于np.unique是不透明的,它可能在做一些不明显的事情。在

In [169]: x = df_mwe.drop_duplicates(cols='one', take_last = True)

In [170]: x
Out[170]: 
   one two
0    1   a
2    2   c
3    3   d
4    4   d
5    5   d

In [171]: np.unique(x['two'],return_inverse=True)
Out[171]: 
(two
0        a
1      NaN
2        c
3        d
Name: two, dtype: object,
 array([0, 1, 2, 3, 3]))

In [172]: np.unique(x['two'].values,return_inverse=True)
Out[172]: (array(['a', 'c', 'd'], dtype=object), array([0, 1, 2, 2, 2]))

下面是pandas的方法,仅供参考(第一个返回值是索引器, 如果第二个指标缺失)

^{pr2}$

相关问题 更多 >