Saya menggunakan perpustakaan pandas untuk membaca beberapa data CSV. Dalam data saya, kolom tertentu berisi string. Benangnya"nan"
adalah nilai yang mungkin, seperti string kosong. Saya berhasil membuat panda membaca "nan" sebagai string, tetapi saya tidak tahu bagaimana membuatnya tidak membaca nilai kosong sebagai NaN. Berikut contoh data dan keluarannya
One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven
>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
One Two Three
0 a 1 one
1 b 2 two
2 NaN 3 three
3 d 4 nan
4 e 5 five
5 nan 6 NaN
6 g 7 seven
Ini dengan benar membaca "nan" sebagai string "nan ', tetapi masih membaca sel kosong sebagai NaN. Saya mencoba meneruskan str
dalam converters
argumen untuk read_csv (dengan converters={'One': str})
), tetapi masih membaca sel kosong sebagai NaN.
Saya menyadari bahwa saya dapat mengisi nilai setelah membaca, dengan fillna, tetapi apakah benar-benar tidak ada cara untuk memberi tahu panda bahwa sel kosong di kolom CSV tertentu harus dibaca sebagai string kosong, bukan NaN?
keep_default_na
bawah ini.Jawaban:
Saya menambahkan tiket untuk menambahkan opsi di sini:
https://github.com/pydata/pandas/issues/1450
Sementara itu,
result.fillna('')
lakukan apa yang Anda inginkanEDIT: dalam versi pengembangan (menjadi 0.8.0 final) jika Anda menentukan daftar
na_values
kosong, string kosong akan tetap menjadi string kosong di hasilsumber
DataFrame.fillna
. Cobaresult.fillna('', inplace=True)
. Jika tidak, itu membuat salinan bingkai data.na_values
(daftar atau dikt diindeks oleh kolom) dankeep_default_na
(bool). Thekeep_default_na
value menunjukkan apakah standar nilai NA panda harus diganti atau ditambahkan ke. Kode OP tidak berfungsi saat ini hanya karena tidak ada bendera ini. Untuk contoh ini, Anda bisa menggunakanpandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False)
.keep_default_na
. Tapi perhatikan bahwa dia tidak ingin 'nan' diperlakukan sebagai default juga. Saya telah menambahkan penjelasan yang lebih lengkap sebagai jawaban baru.keep_default_na=False
) tetapi perilaku default panda dalam hal ini IMO buruk. jika karena alasan tertentu pandas read_csv menyimpulkan kolom bukan numerik, ia seharusnya tidak secara otomatis mengubah string kosong menjadi NaN.Saya masih bingung setelah membaca jawaban dan komentar lainnya. Tetapi jawabannya sekarang tampaknya lebih sederhana, jadi ini dia.
Sejak Pandas versi 0.9 (dari 2012), Anda dapat membaca csv Anda dengan sel kosong yang ditafsirkan sebagai string kosong hanya dengan menyetel
keep_default_na=False
:pd.read_csv('test.csv', keep_default_na=False)
Masalah ini dijelaskan lebih jelas di
Itu diperbaiki pada 19 Agustus 2012 untuk Pandas versi 0.9 in
sumber
Kami memiliki argumen sederhana di Pandas read_csv untuk ini:
Menggunakan:
df = pd.read_csv('test.csv', na_filter= False)
Dokumentasi panda dengan jelas menjelaskan cara kerja argumen di atas.
Tautan
sumber
na_values
untuk mengenali "nan", tetapina_filter
mematikan sepenuhnya akan mengalahkannya. Demikian jawaban saya dengankeep_default_na=False
.