在预处理数据的过程中。我正在二进制编码t
并将值f
1
和0
。最初,这是我的函数:
def binary_encoding(df):
encode = df.replace({"t":1, "f":0})
return encode
这将返回一个浮点数。然后,我将编码行更改为
encode = df.replace({"t":1, "f":0}).astype(int)
但我收到错误
ValueError: Cannot convert non-finite values (NA or inf) to integer
在 4 列中,我是二进制编码,其中 3 列缺少 55/18500 个条目,并且具有 dtype float64。另一列已成功编码,并被识别为 int64 并按预期完全映射。
如何编写一个函数来删除缺失的条目(空白输入),然后应用最初设置的地图?
若要解决将具有NaN
的列中的浮点值转换为整数的最终目标,可以使用具有 N/A 支持数据类型的整数:
假设您有 4 列,如下所示:
3 列有NaN
值,一列没有。
df = pd.DataFrame({'Col1': ['f', 't', np.nan], 'Col2': [np.nan, 'f', 't'], 'Col3': ['f', np.nan, 't'], 'Col4': ['f', 't', 'f']})
Col1 Col2 Col3 Col4
0 f NaN f f
1 t f NaN t
2 NaN t t f
现在,在函数进行二进制编码之后:
def binary_encoding(df):
return df.replace({"t":1, "f":0})
new_df = binary_encoding(df)
print(new_df)
Col1 Col2 Col3 Col4
0 0.0 NaN 0.0 0
1 1.0 0.0 NaN 1
2 NaN 1.0 1.0 0
new_df的数据类型:
new_df.dtypes
Col1 float64
Col2 float64
Col3 float64
Col4 int64
dtype: object
使用具有 N/A 支持数据类型的整数进行数据类型转换:
new_df_int = new_df.astype('Int64')
print(new_df_int)
Col1 Col2 Col3 Col4
0 0 <NA> 0 0
1 1 0 <NA> 1
2 <NA> 1 1 0
new_df_int的数据类型:
new_df_int.dtypes
Col1 Int64
Col2 Int64
Col3 Int64
Col4 Int64
dtype: object
您现在拥有整数数据类型,并根据需要显示为整数! 您现在不再需要删除缺少的条目/行。
您还可以将数据类型转换应用于单个列而不是整个日期范围,例如:
new_df['Col1'] = new_df['Col1'].astype('Int64')