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 values
atribut:
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.
.values
sudah 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.index
untuk 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.
.values
demi 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 DataFrame
benda-benda: mereka to_numpy()
, dan .array
. Mengenai penggunaan, dokumen menyebutkan:
Kami belum menghapus atau mengurangi
Series.values
atauDataFrame.values
, tetapi kami sangat merekomendasikan dan menggunakan.array
atau.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 .array
tidak).
array
Atribut Atribut
ini mengembalikanExtensionArray
objek 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
Series
danIndex
didukung oleh array NumPy normal,Series.array
akan mengembalikan yang baruarrays.PandasArray
, yang merupakan pembungkus tipis (tanpa salinan) di sekitar anumpy.ndarray
.arrays.PandasArray
tidak 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, .array
akan kembali juga
ExtensionArray
mendukung Indeks / Seri, atauExtensionArray
objek 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
.values
itu tidak jelas apakah nilai yang dikembalikan akan menjadi array aktual, beberapa transformasi, atau salah satu array kustom panda (sepertiCategorical
). Misalnya, denganPeriodIndex
,.values
menghasilkanndarray
objek periode baru setiap kali. [...]
Kedua fungsi ini bertujuan untuk meningkatkan konsistensi API, yang merupakan langkah besar ke arah yang benar.
Terakhir, .values
tidak 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_index
harus menjadi elemen dariFrozenList
df.index.names
Karena panda v0.13 Anda juga dapat menggunakan get_values
:
df.index.get_values()
get_values
hanya menelpon .values
. Itu lebih banyak karakter untuk diketik.
Saya mengkonversi panda dataframe
ke list
dan 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
.