Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在删除记录后无法访问索引_Python_Pandas_Dataframe - Fatal编程技术网

python在删除记录后无法访问索引

python在删除记录后无法访问索引,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下问题。在我的pandas数据框中,我有两条记录(具体来说,其中四条)是(无意中)复制的,我用drop\u duplicates(take\u last=True)删除了它们。现在,在其中一列中,我尝试使用unique\u vals,int\u representation=np.unique(df.x,return\u inverse=True)将字符串映射到整数值上,但由于某种原因,我发现原始列中唯一字符串的数量,而int\u表示法中唯一整数值的数量不同,这没有任何意义 因此,我现在正

我有以下问题。在我的pandas数据框中,我有两条记录(具体来说,其中四条)是(无意中)复制的,我用
drop\u duplicates(take\u last=True)
删除了它们。现在,在其中一列中,我尝试使用
unique\u vals,int\u representation=np.unique(df.x,return\u inverse=True)
将字符串映射到整数值上,但由于某种原因,我发现原始列中唯一字符串的数量,而
int\u表示法中唯一整数值的数量不同,这没有任何意义

因此,我现在正在查看原始数据帧,试图理解其原因,我发现在访问数据帧的索引(其中一个丢弃的副本所在的位置)时,突然出现了一个错误。这真的很奇怪,比如说,
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 )
按预期返回
数组([0,1,2,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

产生
等于
数组([0,1,2,3,3])
,这是错误的,我怀疑这与索引
1
现在在帧中丢失有关

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

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

删除重复项后,也会执行此操作。

使用其
.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]))
以下是实现此目的的方法,仅供参考(第一个返回值是索引器, 第二个是所提供的缺失标记列表)


使用序列的
.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]))
以下是实现此目的的方法,仅供参考(第一个返回值是索引器, 第二个是所提供的缺失标记列表)



你能把你的原始帧和代码放出来复制吗?在做这件事之前,原因可能是我没有在删除帧后手动重新索引吗?显示你的代码将有助于诊断问题。你可能正在做一份拷贝或者在原地做一个操作,而你没有expect@Jeff,我编辑了我的问题。你能把你的原始框架和代码放出来复制吗?在这样做之前,原因可能是我在删除框架后没有手动重新编制框架索引吗?显示你的代码将有助于诊断问题。你可能正在做一份拷贝或者在原地做一个操作,而你没有expect@Jeff,我编辑了我的问题。你在用
np.unique做什么?您的最终目标是什么?只是想将这些字符串映射到整数(我正在计算文本的一些统计数据,我需要数字表示的单词),这里暗示我在代码中调用键是一种简单的方法,这实际上是正确的。或者,在我们的解决方案中,添加以下行
df_mwe.index=range(0,np.size(df_mwe['one'])
在我原来的mwe中也做了这项工作。我添加了熊猫做你正在做的事情的方式(这实际上是一个有趣的特性)事实上,对于我的大数据帧,np.unique仍然像你建议的那样疯狂,即使在用
值传递参数时也是如此。我真的不明白为什么,但只有在明确地重新索引了我用
范围编写的ala后,它才开始正常工作。你用
np.unique
做什么?什么您的最终目标是什么?只是想将这些字符串映射到整数(我正在计算文本的一些统计数据,我需要数字表示中的单词),这里暗示我在代码中调用键是一种简单的方法,这实际上是正确的。或者,在您的解决方案中,添加以下行
df_mwe.index=range(0,np.size)(df_mwe['one']))
在我原来的mwe中,我也做了这项工作。我添加了熊猫做你正在做的事情的方式(这实际上是一个有趣的特性)事实上,对于我的大数据帧,np.unique仍然像你建议的那样疯狂,甚至当用
传递参数时也是如此。我真的不明白为什么,但只有在显式地重新索引了我用
范围
编写的ala之后,它才开始正常工作。
In [182]: Index(x['two'].unique()).get_indexer_non_unique(x['two'])
Out[182]: (Int64Index([0, 1, 2, 2, 2], dtype=int64), array([], dtype=int64))