代码之家  ›  专栏  ›  技术社区  ›  JD2775

在pandas数据框中不更改数据类型

  •  0
  • JD2775  · 技术社区  · 8 年前

    我正在尝试将数据帧中的特定列转换为dtype:float。我试过这个:

    grid[['DISTINCT_COUNT','MAX_COL_LENGTH', 'MIN_COL_LENGTH', 'NULL_COUNT' ]].apply(pd.to_numeric, errors='ignore')
    

    但当我打印出来之后:

    print(grid.dtypes)
    

    我仍然看到:

    COLUMN_NM         object
    DISTINCT_COUNT    object
    NULL_COUNT        object
    MAX_COL_VALUE     object
    MIN_COL_VALUE     object
    MAX_COL_LENGTH    object
    MIN_COL_LENGTH    object
    TABLE_CNT         object
    TABLE_NM          object
    DATA_SOURCE       object
    dtype: object
    

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   pault Tanjin    8 年前

    使用 apply() 不就地修改数据帧。必须将操作的输出分配回原始数据帧。

    @冷速的回答 here 解释这里发生的事情:

    所有这些切片/索引操作都会创建原始数据帧的视图/副本,然后重新分配 df 对于这些视图/副本,意味着根本不接触原件。

    在您的情况下,您需要:

    columns = ['DISTINCT_COUNT','MAX_COL_LENGTH', 'MIN_COL_LENGTH', 'NULL_COUNT']
    grid[columns] = grid[columns].apply(pd.to_numeric, errors='ignore')
    

    或者你也可以:

    grid[columns] = pd.to_numeric(grid[columns], errors='ignore')