Saya ingin menemukan semua nilai dalam kerangka data Pandas yang berisi spasi putih (jumlah sembarang) dan mengganti nilai-nilai itu dengan NaNs.
Adakah ide bagaimana hal ini dapat diperbaiki?
Pada dasarnya saya ingin mengubah ini:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
Ke dalam ini:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
Saya sudah berhasil melakukannya dengan kode di bawah ini, tetapi manusia itu jelek. Ini bukan Pythonic dan saya yakin itu bukan penggunaan panda yang paling efisien juga. Saya loop melalui setiap kolom dan melakukan penggantian boolean terhadap topeng kolom yang dihasilkan dengan menerapkan fungsi yang melakukan pencarian regex dari setiap nilai, cocok dengan spasi putih.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Itu bisa sedikit dioptimalkan dengan hanya mengulangi bidang yang bisa berisi string kosong:
if df[i].dtype == np.dtype('object')
Tapi itu tidak banyak perbaikan
Dan akhirnya, kode ini menetapkan string target ke Tidak ada, yang berfungsi dengan fungsi Pandas seperti fillna()
, tetapi akan lebih baik untuk kelengkapan jika saya benar-benar dapat memasukkan secara NaN
langsung, bukan None
.
replace
dengan regex ... (mungkin ini harus diminta sebagai fitur).