Yanıtlar:
ya:
df['index1'] = df.index
veya .reset_index
:
df.reset_index(level=0, inplace=True)
yani, 3 dizin düzeyine sahip çok dizinli bir çerçeveniz varsa, örneğin:
>>> df
val
tick tag obs
2016-02-26 C 2 0.0139
2016-02-27 A 2 0.5577
2016-02-28 C 6 0.0303
ve dizindeki 1. ( tick
) ve 3. ( obs
) düzeylerini sütunlara dönüştürmek isterseniz şunları yaparsınız:
>>> df.reset_index(level=['tick', 'obs'])
tick obs val
tag
C 2016-02-26 2 0.0139
A 2016-02-27 2 0.5577
C 2016-02-28 6 0.0303
df.reset_index(level=df.index.names, inplace=True)
bir sütun halinde verilen bir bütün multiindex dönüştürebilirsiniz
df.reset_index()
sütunlar halinde endeksi bütününü (düzeyi başına bir sütun) taşır ve len (df) 0'dan bir int dizin oluşturur, -1
df['index1'] = df.index
bir uyarı döndürür: "DataFrame'den bir dilimin kopyasında bir değer ayarlanmaya çalışıyor." Bunun yerine aşağıda gösterildiği gibi df.assign () işlevini kullanın.
Biraz daha fazla netlik sağlamak için, dizininde iki düzeyli (MultiIndex) bir DataFrame'e bakalım.
index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'],
['North', 'South']],
names=['State', 'Direction'])
df = pd.DataFrame(index=index,
data=np.random.randint(0, 10, (6,4)),
columns=list('abcd'))
reset_index
Varsayılan parametrelerle denilen yöntem, sütunlara bütün endeks seviyelerinin dönüştürür ve bir basit kullanan RangeIndex
yeni endeks olarak.
df.reset_index()
level
Hangi dizin düzeylerinin sütunlara dönüştürüleceğini denetlemek için parametreyi kullanın . Mümkünse, daha açık olan düzey adını kullanın. Seviye adı yoksa, her seviyeye dışarıdan 0 ile başlayan tamsayı konumu ile başvurabilirsiniz. Burada bir skaler değer veya sıfırlamak istediğiniz tüm dizinlerin bir listesini kullanabilirsiniz.
df.reset_index(level='State') # same as df.reset_index(level=0)
Dizini korumak ve dizini bir sütuna dönüştürmek istediğiniz nadir olayda aşağıdakileri yapabilirsiniz:
# for a single level
df.assign(State=df.index.get_level_values('State'))
# for all levels
df.assign(**df.index.to_frame())
rename_axis
+ reset_index
Öncelikle dizininizi istediğiniz bir etikete yeniden adlandırabilir, ardından bir diziye yükseltebilirsiniz:
df = df.rename_axis('index1').reset_index()
print(df)
index1 gi ptt_loc
0 0 384444683 593
1 1 384444684 594
2 2 384444686 596
Bu, MultiIndex
veri çerçeveleri için de geçerlidir:
print(df)
# val
# tick tag obs
# 2016-02-26 C 2 0.0139
# 2016-02-27 A 2 0.5577
# 2016-02-28 C 6 0.0303
df = df.rename_axis(['index1', 'index2', 'index3']).reset_index()
print(df)
index1 index2 index3 val
0 2016-02-26 C 2 0.0139
1 2016-02-27 A 2 0.5577
2 2016-02-28 C 6 0.0303
reset_index
Yöntemi kullanmak ve mevcut dizininizi korumak istiyorsanız şunları kullanmalısınız:
df.reset_index().set_index('index', drop=False)
veya yerinde değiştirmek için:
df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)
Örneğin:
print(df)
gi ptt_loc
0 384444683 593
4 384444684 594
9 384444686 596
print(df.reset_index())
index gi ptt_loc
0 0 384444683 593
1 4 384444684 594
2 9 384444686 596
print(df.reset_index().set_index('index', drop=False))
index gi ptt_loc
index
0 0 384444683 593
4 4 384444684 594
9 9 384444686 596
Ve indeks etiketinden kurtulmak istiyorsanız şunları yapabilirsiniz:
df2 = df.reset_index().set_index('index', drop=False)
df2.index.name = None
print(df2)
index gi ptt_loc
0 0 384444683 593
4 4 384444684 594
9 9 384444686 596
df1 = pd.DataFrame({"gi":[232,66,34,43],"ptt":[342,56,662,123]})
p = df1.index.values
df1.insert( 0, column="new",value = p)
df1
new gi ptt
0 0 232 342
1 1 66 56
2 2 34 662
3 3 43 123
Bunu yapmanın çok basit bir yolu reset_index () yöntemini kullanmaktır. Df veri çerçevesi için aşağıdaki kodu kullanın:
df.reset_index(inplace=True)
Bu şekilde, dizin bir sütun olacak ve yerinde True olarak kullanılarak bu kalıcı bir değişiklik olacaktır.