Pandas:删除缺少数据的行,并在UDF中应用二进制编码



在预处理数据的过程中。我正在二进制编码t并将值f10。最初,这是我的函数:

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')

相关内容