2013-12-10 28 views
143

Tôi có một khung dữ liệu mà từ đó tôi xóa một số hàng. Kết quả là, tôi nhận được một khung dữ liệu trong đó chỉ số là một cái gì đó như thế: [1,5,6,10,11] và tôi muốn đặt lại nó thành [0,1,2,3,4]. Tôi làm nó như thế nào?Làm cách nào để đặt lại chỉ mục trong khung dữ liệu gấu trúc?

THÊM

Sau đây dường như làm việc:

df = df.reset_index() 
del df['index'] 

Sau đây không hoạt động:

df = df.reindex() 

Trả lời

318

reset_index() là những gì bạn đang tìm kiếm. Nếu bạn không muốn nó lưu lại dưới dạng một cột, rồi làm:

df = df.reset_index(drop=True) 
+47

+1 cho 'drop = True' – Rhubarb

+53

Thay vì gán lại khung dữ liệu cho cùng một biến, bạn có thể đặt đối số' inplace = True'. – ahuelamo

+1

Lưu ý rằng trong trường hợp 'inplace = True' phương thức trả về None – alyaxey

8

giải pháp khác là assign RangeIndex hoặc range:

df.index = pd.RangeIndex(len(df.index)) 

df.index = range(len(df.index)) 

Nó là nhanh hơn:

df = pd.DataFrame({'a':[8,7], 'c':[2,4]}, index=[7,8]) 
df = pd.concat([df]*10000) 
print (df.head()) 

In [298]: %timeit df1 = df.reset_index(drop=True) 
The slowest run took 7.26 times longer than the fastest. This could mean that an intermediate result is being cached. 
10000 loops, best of 3: 105 µs per loop 

In [299]: %timeit df.index = pd.RangeIndex(len(df.index)) 
The slowest run took 15.05 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 7.84 µs per loop 

In [300]: %timeit df.index = range(len(df.index)) 
The slowest run took 7.10 times longer than the fastest. This could mean that an intermediate result is being cached. 
100000 loops, best of 3: 14.2 µs per loop 
+0

@Outcast Source - Nhanh nhất là' len (df.index) ', 381ns vs' df.shape' 1.17us. Oyr cái gì đó mất tích? – jezrael

Các vấn đề liên quan