重新索引具有重复索引值的数据框
Reindex a dataframe with duplicate index values
所以我将 4 个 csv 导入并合并到一个名为 data 的数据框中。但是,在检查数据帧的索引时:
index_series = pd.Series(data.index.values)
index_series.value_counts()
我看到多个索引条目有 4 个计数。我想完全重新索引数据数据帧,因此每一行现在都有一个唯一的索引值。我试过了:
data.reindex(np.arange(len(data)))
给出了错误 "ValueError: cannot reindex from a duplicate axis." google 搜索让我认为这个错误是因为最多有 4 行共享相同的索引值。知道如何在不删除任何行的情况下重新编制索引吗?我也不是特别关心行的顺序,因为我总是可以对它进行排序。
更新:
所以最后我确实找到了一种重新索引的方法。
data['index'] = np.arange(len(data))
data = data.set_index('index')
据我了解,我只是在我的数据框中添加了一个名为 'index' 的新列,然后将该列设置为我的索引。
至于我的 csv,它们是 this page of Lending Club loan stats 上 "download loan data" 下的四个 csv。
使用此示例数据很容易重现您的错误:
In [92]: data = pd.DataFrame( [33,55,88,22], columns=['x'], index=[0,0,1,2] )
In [93]: data.index.is_unique
Out[93]: False
In [94:] data.reindex(np.arange(len(data))) # same error message
问题是因为 reindex
需要唯一的索引值。在这种情况下,您不想保留旧索引值,您只需要唯一的新索引值。最简单的方法是:
In [95]: data.reset_index(drop=True)
Out[72]:
x
0 33
1 55
2 88
3 22
请注意,如果您想保留旧的索引值,可以取消 drop=True
。
所以我将 4 个 csv 导入并合并到一个名为 data 的数据框中。但是,在检查数据帧的索引时:
index_series = pd.Series(data.index.values)
index_series.value_counts()
我看到多个索引条目有 4 个计数。我想完全重新索引数据数据帧,因此每一行现在都有一个唯一的索引值。我试过了:
data.reindex(np.arange(len(data)))
给出了错误 "ValueError: cannot reindex from a duplicate axis." google 搜索让我认为这个错误是因为最多有 4 行共享相同的索引值。知道如何在不删除任何行的情况下重新编制索引吗?我也不是特别关心行的顺序,因为我总是可以对它进行排序。
更新: 所以最后我确实找到了一种重新索引的方法。
data['index'] = np.arange(len(data))
data = data.set_index('index')
据我了解,我只是在我的数据框中添加了一个名为 'index' 的新列,然后将该列设置为我的索引。 至于我的 csv,它们是 this page of Lending Club loan stats 上 "download loan data" 下的四个 csv。
使用此示例数据很容易重现您的错误:
In [92]: data = pd.DataFrame( [33,55,88,22], columns=['x'], index=[0,0,1,2] )
In [93]: data.index.is_unique
Out[93]: False
In [94:] data.reindex(np.arange(len(data))) # same error message
问题是因为 reindex
需要唯一的索引值。在这种情况下,您不想保留旧索引值,您只需要唯一的新索引值。最简单的方法是:
In [95]: data.reset_index(drop=True)
Out[72]:
x
0 33
1 55
2 88
3 22
请注意,如果您想保留旧的索引值,可以取消 drop=True
。