gpt4 book ai didi

python - 替换数据框中的列值的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 08:41:26 24 4
gpt4 key购买 nike

我希望发生以下事情:

对于 df 中的每一列,检查其类型是否为数字,如果不是,则使用标签编码器将 str/obj 映射到数字类(例如 0,1,2,3...)。

我尝试通过以下方式做到这一点:

for col in df:
if not np.issubdtype(df[col].dtype, np.number):
df[col] = LabelEncoder().fit_transform(df[col])

我发现这里没有什么问题。

首先 - 列名称可以重复,因此 df[col]返回不止一列,这不是我想要的。

第二 - df[col].dtype抛出错误:

AttributeError: 'DataFrame' object has no attribute 'dtype'

我认为这可能是由于问题 #1 引起的,例如我们返回了多列。但我没有信心。

第三 - 将分配 df[col] = LabelEncoder().fit_transform(df[col])导致 df 中的列替换,还是我应该做一些深奥的 df 分区和串联?

谢谢

最佳答案

由于 LabelEncoder 一次仅支持一列,因此对列进行迭代是您唯一的选择。您可以使用 select_dtypes 选择列,然后使用 df.applyLabelEncoder 应用到每列,从而使其更加简洁。

cols = df.select_dtypes(exclude=[np.number]).columns
df[cols] = df[cols].apply(lambda x: LabelEncoder().fit_transform(x))

或者,您可以通过仅选择对象数据类型来构建掩码(有点不稳定,但易于扩展):

m = df.dtypes == object
# m = [not np.issubdtype(d, np.number) for d in df.dtypes]
df.loc[:, m] = df.loc[:, m].apply(lambda x: LabelEncoder().fit_transform(x))

关于python - 替换数据框中的列值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53472350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com