【问题标题】:Ignore string columns while doing执行时忽略字符串列
【发布时间】:2017-11-22 04:39:22
【问题描述】:

我正在使用以下代码来规范化 pandas DataFrame:

df_norm = (df - df.mean()) / (df.max() - df.min())

当所有列都是数字时,这可以正常工作。但是,现在我在df 中有一些字符串列,并且上述规范化出现了错误。有没有办法只对数据框的数字列执行这种规范化(保持字符串列不变)?

【问题讨论】:

    标签: python python-3.x pandas normalization


    【解决方案1】:

    您可以使用select_dtypes 来计算所需列的值:

    df = pd.DataFrame({'a': [1, 2, 3], 'b': ['a', 'b', 'c'], 'c': [4, 5, 6]})
    
    df
    
       a  b  c
    0  1  a  4
    1  2  b  5
    2  3  c  6
    
    df_num = df.select_dtypes(include='number')
    
    df_num
    
       a  c
    0  1  4
    1  2  5
    2  3  6
    

    然后你可以将它们分配回原来的df

    df_norm = (df_num - df_num.mean()) / (df_num.max() - df_num.min())
    
    
    df[df_norm.columns] = df_norm
    
    df
    
         a  b    c
    0 -0.5  a -0.5
    1  0.0  b  0.0
    2  0.5  c  0.5
    

    【讨论】:

    • 在我写我的时候没有看到你的答案。必要时可以删除,不知道协议是什么。
    • 查看我的答案并解决您答案中的一个缺陷。也就是说,您可以使用 np.number 覆盖所有数字类型。
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2019-06-30
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多