Bir csv okurken pandalarda dizin sütununu kaldırma


128

Bir CSV dosyasını içe aktaran aşağıdaki koda sahibim. 3 sütun var ve ilk ikisini değişkenler olarak ayarlamak istiyorum. İkinci sütunu "verimlilik" değişkenine ayarladığımda, indeks sütunu da işaretleniyor. İndeks sütunundan nasıl kurtulabilirim?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

Kullanmayı denedim

del df['index']

ben ayarladıktan sonra

energy = df.index

başka bir gönderide bulduğum ancak bu "KeyError: 'dizin'" ile sonuçlanıyor

Yanıtlar:


70

DataFrames ve Series her zaman bir dizine sahiptir. Sütun (lar) ın yanında görüntülenmesine rağmen, bir sütun değildir, bu yüzden del df['index']çalışmadı.

Dizini basit ardışık sayılarla değiştirmek istiyorsanız, kullanın df.reset_index().

Dizinin neden orada olduğunu ve nasıl kullanıldığını anlamak için örneğin Pandas'a 10 dakika bakın .


1
Teşekkürler! Pandaları kullanmadan farklı bir şekilde içe aktarmaya karar verdim. Sütunların her birinde bazı aritmetik işlemler yapmalıyım ve python, indeks sütununun eklenmesini beğenmedi. Pandalar kesinlikle verileri içe aktarmanın en kolay yoludur, ancak her zaman bulduğum en iyi yol değil.
Bogdan Janiszewski

2
Aritmetik yapmak için Pandaları kullanmayı denediniz mi?
Jamie Bull

1
indeks adı kaldırılabilir mi?
Quant

3
Evet index.name = None,.
Dan Allan

1
@BogdanJaniszewski, pandaları kullanmadıysanız, neden bunu cevap olarak kabul ettiniz?
multigoodverse

250

CSV dosyanızdan okurken, bağımsız değişkeni ekleyin, index=Falseörneğin:

 df.to_csv(filename, index=False)

ve csv'den okumak

df.read_csv(filename, index=False)  

Bu, sorunu önlemelidir, böylece daha sonra düzeltmenize gerek kalmaz.


8
Çok teşekkürler. Asıl soru tam da bu.
Soluk Mavi Nokta

1
"header = False" aynı şekilde başlıkları kaldırmak için de işe
yarar

29
olmalıdır index_col=False.
Vedda

1
df.to_sql("table",cursor,if_exists="append",index=False)Ayrıca kullanmak sqlite hatasını düzeltirsqlite3.OperationalError: table message has no column named index
Anna

1
@vedda pandalarda 0.23.4 index=Falseiçin to_excel()ve index_col=Falseile görünüyor read_csv(). : - /
matt wilkie

70

df.reset_index(drop=True, inplace=True)


2
Bu aslında benim en sevdiğim çözüm, ancak çok ayrıntılı bir yanıt değil. Kılavuz, argüman hakkında şunu okur drop: "Veri çerçevesi sütunlarına dizin eklemeyi denemeyin. Bu, dizini varsayılan tamsayı dizinine sıfırlar." pandas.pydata.org/pandas-docs/stable/generated/…
tommy.carstensen

@ tommy.carstensen Öyleyse, indekste tam sayıları önceki dizinin yerine geçecek şekilde almaktan nasıl kaçınırsınız? Bunun, bağlantınızın metninin yanlış anlaşılması olduğunu düşünüyorum. Buradaki soru endeksi düşürmektir . Ve buraya buradan ulaşılır. Varsayılan tam sayıları alırsınız, çünkü indeksi olmayan bir tarih çerçevesi yoktur, ancak önceki indeksi atmışsınızdır. Bu nedenle, hafızayı verimli kullandığı için de bu cevap kabul edilen cevap olmalıdır inplace=True.
Lorenz

13

Örneğin bir "id" olması durumunda sütunlardan birini indeks olarak ayarlayabilirsiniz. Bu durumda, dizin sütunu, seçtiğiniz sütunlardan biriyle değiştirilecektir.

df.set_index('id', inplace=True)

3

Sorununuz benimle aynıysa, sütun başlıklarını 0'dan sütun boyutuna sıfırlamak istediğiniz yerde. Yapmak

df = pd.DataFrame(df.values);

DÜZENLE:

Heterojen veri türleriniz varsa iyi bir fikir değil. Sadece kullan daha iyi

df.columns = range(len(df.columns))

2

Eğer sorununuzu çözmezse, from_csv işlevinin index_col parametresini kullanarak csv dosyanızdaki hangi sütunun bir dizin olduğunu belirtebilirsiniz, lütfen verilerinizin bir örneğini sağlayın


2

O df=df.reset_index() zaman yaptığım bir şeydf=df.drop(['index'],axis=1)


Hata: "etiketler ['dizin'] eksende yer almıyor"
Vasin Yuriy

@VasinYuriy df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex']), bunun anlamı , yalnızca dizinin bir adı olmadığı standart durumda 'dizin' ile çalışır ve ardından 'dizin' adlı bir sütun haline gelir df.reset_index().drop(columns=['index']). Eklenen parametre axis=1varsayılandır. Bu yöntem tavsiye edilmez, @ SubhojitMukherjee'nin reset_index(inplace=True)"yerinde" çalışır ve böylece hafızadan tasarruf sağlar.
Lorenz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.