2015-06-22 7 views
4

Итак, я импортировал и объединил 4 csv в один dataframe, называемый данными. Однако при проверке индекса в dataframe с:Reindex dataframe с повторяющимися значениями индекса

index_series = pd.Series(data.index.values) 
index_series.value_counts() 

Я вижу, что несколько записей индекса имеют 4 отсчетов. Я хочу полностью переиндексировать DataFrame данных, поэтому каждая строка теперь имеет уникальное значение индекса. Я пробовал:

data.reindex(np.arange(len(data))) 

, который дал ошибку «ValueError: невозможно переиндексировать с дублирующей оси». Поиск в Google приводит меня к мысли, что эта ошибка связана с тем, что существует до 4 строк, которые имеют одинаковое значение индекса. Любая идея, как я могу сделать это переиндексации, не отбрасывая никаких строк? Я не особо забочусь о порядке строк, так как я всегда могу его сортировать.

UPDATE: Итак, в конце концов, я нашел способ переиндексации, как я хотел.

data['index'] = np.arange(len(data)) 
data = data.set_index('index') 

Как я понимаю, я просто добавил новый столбец под названием «index» в свой кадр данных, а затем установил этот столбец в качестве моего индекса. Что касается моих csv, то они были четырьмя csv в разделе «скачать данные кредита» на this page of Lending Club loan stats.

+3

Можете ли вы показать нам свой DataFrame? Или еще лучше, как создать пример DataFrame? – chrisaycock

+0

В дополнение к комментарию @ chrisaycock вы могли бы даже предоставить некоторые образцы данных из ваших csv-файлов, поэтому ваша проблема может возникнуть из-за неправильного чтения csv. – albert

ответ

5

Это довольно легко повторить свою ошибку с этими данными выборки:

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, если вы хотите сохранить старые значения индекса.

+0

Если вы не хотите иметь старые индексы в новом столбце, вы можете вызвать 'data.reset_index (drop = True)'. – Tim

+0

@Tim Спасибо! Это выглядит немного чище, поэтому я отредактировал, чтобы отразить ваше предложение. – JohnE

Смежные вопросы