【问题标题】:Datatypes not changing in Pandas DataFramePandas DataFrame 中的数据类型不变
【发布时间】:2018-06-08 17:19:46
【问题描述】:

我正在尝试将 DataFrame 中的特定列转换为 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

有什么想法吗?

【问题讨论】:

  • 此操作不会修改数据框。您必须将输出分配回原始文件。 grid[['DISTINCT_COUNT','MAX_COL_LENGTH', 'MIN_COL_LENGTH', 'NULL_COUNT' ]] = grid[['DISTINCT_COUNT','MAX_COL_LENGTH', 'MIN_COL_LENGTH', 'NULL_COUNT' ]].apply(pd.to_numeric, errors='ignore')
  • @pault 尽管这很简单,但您应该将其发布为答案,以便将来的用户知道有已发布的解决方案。
  • @pault 啊,谢谢。我应该知道的更好。那工作得很好。如果你把它变成一个答案,如果你愿意,我可以“接受”
  • @Barker 我正在寻找一个受骗的候选人。如果我找不到它,我会发布一个答案。更新:找到它here。虽然这个问题不是一个完全的欺骗,但接受的答案解决了这个问题。

标签: python pandas dataframe


【解决方案1】:

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

@coldspeed 的回答 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')

【讨论】:

    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2017-02-16
    • 2020-05-24
    • 2018-02-09
    • 2014-08-18
    • 2012-07-24
    相关资源
    最近更新 更多