Apakah Anda tahu cara mendapatkan indeks atau kolom DataFrame sebagai array NumPy atau daftar python?
Apakah Anda tahu cara mendapatkan indeks atau kolom DataFrame sebagai array NumPy atau daftar python?
Jawaban:
Untuk mendapatkan array NumPy, Anda harus menggunakan valuesatribut:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
Ini mengakses bagaimana data sudah disimpan, jadi tidak perlu konversi.
Catatan: Atribut ini juga tersedia untuk banyak objek panda lainnya.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Untuk mendapatkan indeks sebagai daftar, hubungi tolist:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
Dan juga untuk kolom.
.valuessudah usang, .to_numpy()adalah penggantian yang disarankan jika Anda ingin array NumPy. Bisakah Anda memperluas ini mengakses bagaimana data sudah disimpan, sehingga tidak perlu konversi ?
Anda bisa menggunakan df.indexuntuk mengakses objek indeks dan kemudian mendapatkan nilai dalam daftar menggunakan df.index.tolist(). Demikian pula, Anda dapat menggunakan df['col'].tolist()untuk Seri.
df.index.values.tolist()
df.index.tolist()tidak mengembalikan metode contoh. Ini mengembalikan daftar indeks. Ini adalah metode yang didefinisikan pada indeks panda. Sementara memanggil nilai terlebih dahulu adalah suatu kemungkinan, mendelegasikan pekerjaan ke numpy bukanlah koreksi - hanya sebuah alternatif.
.valuesdemi metode ini!Dari v0.24.0 dan seterusnya, kami akan memiliki dua baru, metode disukai merek memukul untuk memperoleh NumPy array dari Index, Series, dan DataFramebenda-benda: mereka to_numpy(), dan .array. Mengenai penggunaan, dokumen menyebutkan:
Kami belum menghapus atau mengurangi
Series.valuesatauDataFrame.values, tetapi kami sangat merekomendasikan dan menggunakan.arrayatau.to_numpy()sebagai gantinya.
Lihat bagian ini dari catatan rilis v0.24.0 untuk informasi lebih lanjut.
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
Secara default, tampilan dikembalikan. Setiap modifikasi yang dilakukan akan memengaruhi yang asli.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Jika Anda membutuhkan salinan, gunakan to_numpy(copy=True);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Perhatikan bahwa fungsi ini juga berfungsi untuk DataFrames (sementara .arraytidak).
arrayAtribut Atribut
ini mengembalikanExtensionArrayobjek yang mendukung Indeks / Seri.
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
Dari sini, dimungkinkan untuk mendapatkan daftar menggunakan list:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
atau, langsung saja hubungi .tolist():
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Mengenai apa yang dikembalikan, dokumen menyebutkan,
Untuk
SeriesdanIndexdidukung oleh array NumPy normal,Series.arrayakan mengembalikan yang baruarrays.PandasArray, yang merupakan pembungkus tipis (tanpa salinan) di sekitar anumpy.ndarray.arrays.PandasArraytidak terlalu berguna sendiri, tetapi ia menyediakan antarmuka yang sama dengan array ekstensi apa pun yang ditentukan dalam panda atau oleh perpustakaan pihak ketiga.
Jadi, untuk meringkas, .arrayakan kembali juga
ExtensionArraymendukung Indeks / Seri, atauExtensionArrayobjek baru dibuat sebagai pembungkus tipis di atas array yang mendasarinya.Dasar pemikiran untuk menambahkan DUA metode baru
Fungsi-fungsi ini ditambahkan sebagai hasil diskusi di bawah dua masalah GitHub GH19954 dan GH23623 .
Secara khusus, dokumen menyebutkan alasannya:
[...] dengan
.valuesitu tidak jelas apakah nilai yang dikembalikan akan menjadi array aktual, beberapa transformasi, atau salah satu array kustom panda (sepertiCategorical). Misalnya, denganPeriodIndex,.valuesmenghasilkanndarrayobjek periode baru setiap kali. [...]
Kedua fungsi ini bertujuan untuk meningkatkan konsistensi API, yang merupakan langkah besar ke arah yang benar.
Terakhir, .valuestidak akan ditinggalkan dalam versi saat ini, tetapi saya berharap ini dapat terjadi di beberapa titik di masa depan, jadi saya akan mendorong pengguna untuk bermigrasi ke API yang lebih baru, secepat Anda bisa.
Jika Anda berurusan dengan kerangka data multi-indeks, Anda mungkin tertarik untuk mengekstraksi hanya kolom satu nama multi-indeks. Anda dapat melakukan ini sebagai
df.index.get_level_values('name_sub_index')
dan tentu saja name_sub_indexharus menjadi elemen dariFrozenList df.index.names
Karena panda v0.13 Anda juga dapat menggunakan get_values:
df.index.get_values()
get_valueshanya menelpon .values. Itu lebih banyak karakter untuk diketik.
Saya mengkonversi panda dataframeke listdan kemudian menggunakan dasar list.index(). Sesuatu seperti ini:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Anda memiliki nilai indeks Anda sebagai idx.
Cara yang lebih baru untuk melakukan ini adalah dengan menggunakan fungsi .to_numpy ().
Jika saya memiliki kerangka data dengan kolom 'harga', saya dapat mengonversinya sebagai berikut:
priceArray = df['price'].to_numpy()
Anda juga bisa meneruskan tipe data, seperti float atau objek, sebagai argumen fungsi
Di bawah ini adalah cara sederhana untuk mengubah kolom dataframe menjadi array numpy.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy adalah array yang numpy.
Saya mencoba dengan to.numpy()tetapi memberi saya kesalahan di bawah ini:
TypeError: tidak ada konversi yang didukung untuk jenis: (dtype ('O'),) saat melakukan klasifikasi Binary Relevance menggunakan Linear SVC. to.numpy () mengubah dataFrame menjadi array numpy tetapi tipe data elemen dalam daftar karena kesalahan yang diamati di atas.
to_numpy.