Cara menyembunyikan kolom DataFrame yang berisi string dan NaNnilai menjadi float. Dan ada kolom lain yang nilainya string dan float; bagaimana mengubah seluruh kolom ini menjadi float.
JANGAN GUNAKAN convert_objects. Itu sudah usang. Gunakan to_numericatau astypesebagai gantinya
Ted Petrou
Jawaban:
72
CATATAN:pd.convert_objects sekarang sudah tidak digunakan lagi. Anda harus menggunakan pd.Series.astype(float)atau pd.to_numericseperti yang dijelaskan dalam jawaban lain.
Ini tersedia dalam 0.11. Paksa konversi (atau set ke nan) Ini akan bekerja bahkan ketika astypeakan gagal; itu juga seri demi seri sehingga tidak akan mengubah katakanlah kolom string lengkap
In[10]: df =DataFrame(dict(A =Series(['1.0','1']), B =Series(['1.0','foo'])))In[11]: dfOut[11]:
A B01.01.011 fooIn[12]: df.dtypesOut[12]:
A object
B object
dtype: objectIn[13]: df.convert_objects(convert_numeric=True)Out[13]:
A B01111NaNIn[14]: df.convert_objects(convert_numeric=True).dtypesOut[14]:
A float64
B float64
dtype: object
Harap perhatikan bahwa ini tidak berfungsi untuk kolom (di leadt multiindex), hanya berfungsi untuk nilai di kerangka data
denfromufa
1
Saya harus menggunakan set_levels untuk mengonversi string menjadi float
denfromufa
16
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)Anda hanya dapat mengonversi satu kolom.
Jack
19
ini sekarang pd.to_numeric (col) di versi yang lebih baru
Jeff
11
convert_objects tidak digunakan lagi di panda yang lebih baru. Gunakan konverter khusus tipe data pd.to_numeric.
Thomas Matthew
57
Kamu bisa mencoba df.column_name = df.column_name.astype(float). Untuk NaNnilai, Anda perlu menentukan bagaimana nilai tersebut harus dikonversi, tetapi Anda dapat menggunakan .fillnametode untuk melakukannya.
Contoh:
In[12]: dfOut[12]:
a b00.10.21NaN0.320.40.5In[13]: df.a.valuesOut[13]: array(['0.1', nan,'0.4'], dtype=object)In[14]: df.a = df.a.astype(float).fillna(0.0)In[15]: dfOut[15]:
a b00.10.210.00.320.40.5In[16]: df.a.valuesOut[16]: array([0.1,0.,0.4])
Di versi panda yang lebih baru (0,17 dan lebih tinggi), Anda dapat menggunakan fungsi to_numeric . Ini memungkinkan Anda untuk mengonversi seluruh kerangka data atau hanya kolom individual. Ini juga memberi Anda kemampuan untuk memilih cara memperlakukan hal-hal yang tidak dapat dikonversi ke nilai numerik:
import pandas as pd
s = pd.Series(['1.0','2',-3])
pd.to_numeric(s)
s = pd.Series(['apple','1.0','2',-3])
pd.to_numeric(s, errors='ignore')
pd.to_numeric(s, errors='coerce')
convert_objects
. Itu sudah usang. Gunakanto_numeric
atauastype
sebagai gantinyaJawaban:
Ini tersedia dalam 0.11. Paksa konversi (atau set ke nan) Ini akan bekerja bahkan ketika
astype
akan gagal; itu juga seri demi seri sehingga tidak akan mengubah katakanlah kolom string lengkapsumber
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)
Anda hanya dapat mengonversi satu kolom.Kamu bisa mencoba
df.column_name = df.column_name.astype(float)
. UntukNaN
nilai, Anda perlu menentukan bagaimana nilai tersebut harus dikonversi, tetapi Anda dapat menggunakan.fillna
metode untuk melakukannya.Contoh:
sumber
Di versi panda yang lebih baru (0,17 dan lebih tinggi), Anda dapat menggunakan fungsi to_numeric . Ini memungkinkan Anda untuk mengonversi seluruh kerangka data atau hanya kolom individual. Ini juga memberi Anda kemampuan untuk memilih cara memperlakukan hal-hal yang tidak dapat dikonversi ke nilai numerik:
sumber
pd.to_numeric
keDataFrame
, seseorang dapat menggunakandf.apply(pd.to_numeric)
seperti yang dijelaskan secara rinci dalam jawaban ini .sumber
ValueError: could not convert string to float: 'date'
Anda harus mengganti string kosong ('') dengan np.nan sebelum mengubahnya menjadi float. yaitu:
sumber
Berikut ini contohnya
tetapi jika ini semua adalah nilai string ... seperti dalam kasus saya ... Ubah kolom yang diinginkan menjadi float:
Dataframe Anda sekarang akan memiliki nilai float :-)
sumber