Saya memiliki file csv yang memiliki nilai string dan float seperti di bawah ini:

"c1","c2","c3"
"A","1.3334343434","1"
"B","2","6.434343443434"
"D","3.434344343443","P"
"B","2.446647884844","Z"
"A","2","1.98984934394943"

Saya perlu mengidentifikasi hanya float di file ini dan membulatkannya hingga 2 tempat desimal. Jika saya menggunakan ini sebagai bingkai data panda, ini memberikan kesalahan. Tidak yakin bagaimana mengidentifikasi nilai float untuk melakukan operasi round(). Mencari saran. Terima kasih

1
flux0987 4 Juni 2019, 15:50

1 menjawab

Jawaban Terbaik

Cara yang sangat sederhana untuk melakukan ini adalah dengan menggunakan fungsi kustom sederhana, terapkan dan di dalamnya coba dan tangkap.

data=pd.read_csv('newdata.csv')

print(data)

Datanya seperti yang disediakan:

  c1        c2                c3
0  A  1.333434                 1
1  B  2.000000    6.434343443434
2  D  3.434344                 P
3  B  2.446648                 Z
4  A  2.000000  1.98984934394943

Sekarang kami membuat fungsi khusus yang mengambil kolom demi kolom dari kerangka data dan membulatkan float apa pun ke 2 tempat desimal:

def change(m):
    k=[]

    for x in m:
        try:
            k.append(round(float(x),2))

        except:
            k.append(x)
    return k


data.apply(lambda x: change(x))

Dan outputnya adalah:

    c1   c2      c3
0   A   1.33    1
1   B   2.00    6.43
2   D   3.43    P
3   B   2.45    Z
4   A   2.00    1.99

Apa fungsinya adalah, di dalam pernyataan try ia mencoba mengubah apa pun menjadi float, jika mungkin, ia membulatkannya dan mengirimkannya kembali, dan jika ada kesalahan, ia mengembalikan nilai aslinya (apakah string atau apa pun) .

Solusi yang disarankan oleh pengguna lain juga cukup bagus. Jadi, pilih itu jika itu membantu Anda lebih baik.

1
Amit Amola 4 Juni 2019, 13:32