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

时间:2018-11-25 21:51:47

标签: python pandas dataframe

我想发生以下事情:

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

我正在尝试通过以下方式进行操作:

with open('sys.argv', 'r') as maze:
      print(maze.read())

我在这里看不到什么问题。

第一-列名可以重复,因此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

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

第三-分配AttributeError: 'DataFrame' object has no attribute 'dtype' 会导致df中的列替换,还是我应该进行一些深奥的df分区和串联?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

或者,您可以仅通过选择对象dtypes来构建蒙版(有点片状但易于扩展):

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