Saya memiliki bingkai data panda dengan dua kolom. Saya perlu mengubah nilai-nilai kolom pertama tanpa mempengaruhi yang kedua dan mendapatkan kembali seluruh kerangka data hanya dengan nilai kolom pertama yang diubah. Bagaimana saya bisa melakukannya dengan menggunakan panda?
python
pandas
dataframe
python-3.5
Amani
sumber
sumber
apply
dalam situasi seperti ini. Sebaliknya, operasikan pada kolom secara langsung.apply
sebanyak mungkin. Jika Anda tidak yakin perlu menggunakannya, mungkin Anda tidak menggunakannya. Saya merekomendasikan untuk melihat Kapan saya ingin menggunakan panda apply () dalam kode saya? .Jawaban:
Diberikan kerangka data sampel
df
sebagai:yang Anda inginkan adalah:
yang mengembalikan:
sumber
apply
tidak boleh digunakan dalam situasi seperti iniapply
menggunakan loop internal atas baris yang jauh lebih lambat dari fungsi vektor, seperti misalnyadf.a = df.a / 2
(lihat jawaban Mike Muller).Untuk satu kolom lebih baik digunakan
map()
, seperti ini:sumber
map()
lebih baik daripadaapply()
untuk satu kolom?df['file_name'] = df['Path'].map(lambda a: os.path.basename(a))
Anda tidak perlu fungsi sama sekali. Anda dapat mengerjakan seluruh kolom secara langsung.
Contoh data:
Setengah semua nilai dalam kolom
a
:sumber
Meskipun tanggapan yang diberikan benar, mereka memodifikasi kerangka data awal, yang tidak selalu diinginkan (dan, mengingat OP meminta contoh "menggunakan
apply
", mungkin mereka menginginkan versi yang mengembalikan bingkai data baru, sepertiapply
halnya).Ini dimungkinkan menggunakan
assign
: valid untukassign
kolom yang ada, karena negara dokumentasi (penekanan adalah milikku):Pendeknya:
Perhatikan bahwa fungsi akan melewati seluruh kerangka data, tidak hanya kolom yang ingin Anda modifikasi, jadi Anda harus memastikan bahwa Anda memilih kolom yang tepat di lambda Anda.
sumber
Jika Anda benar-benar khawatir tentang kecepatan eksekusi fungsi terapkan Anda dan Anda memiliki set data yang besar untuk dikerjakan, Anda bisa menggunakan lebih cepat untuk membuat eksekusi lebih cepat, berikut adalah contoh untuk lebih cepat pada bingkai data panda:
Ini akan memungkinkan semua core CPU Anda untuk menghitung hasilnya sehingga akan jauh lebih cepat daripada fungsi normal yang berlaku. Coba dan beri tahu saya jika itu bermanfaat bagi Anda.
sumber
Biarkan saya mencoba perhitungan yang kompleks menggunakan datetime dan mempertimbangkan nol atau spasi kosong. Saya mengurangi 30 tahun pada kolom datetime dan menggunakan
apply
metode sertalambda
mengubah format datetime. Lineif x != '' else x
akan menangani semua ruang kosong atau nol yang sesuai.sumber