代码之家  ›  专栏  ›  技术社区  ›  Cedric Zoppolo

在数据帧中将某些值替换为NaN时,如何避免数据类型转换?

  •  3
  • Cedric Zoppolo  · 技术社区  · 6 年前

    我有一个 pandas DataFrame 我需要将某些值替换为 NaN 基于过滤器。这样做时,我将面临数据类型的更改。如何避免这种数据类型转换?

    玩具示例代码

    import pandas as pd
    import numpy as np
    df = pd.Series([False, True, False, True])
    filter = pd.Series([True, True, False, False])
    df[filter] = np.nan
    

    True False . 然而 是的 值已转换为1和 值被转换为0,如下面的输出所示。

    >>> df
    0    NaN
    1    NaN
    2    0.0
    3    1.0
    dtype: float64
    

    部分解决方案

    我现在唯一能想到的部分解决办法是:

    df[df==1] = True
    df[df==0] = False
    print df
    

    >>> df
    0      NaN
    1      NaN
    2    False
    3     True
    dtype: object
    

    问题

    我知道如果我检查一个值是否为1,然后我将 . 但是我想避免我的价值观 是的 . 这是可能的,所以我不需要使用我所说的部分解决方案?

    1 回复  |  直到 6 年前
        1
  •  4
  •   BENY    6 年前

    更改为 object

    df = pd.Series([False, True, False, True])
    filter = pd.Series([True, True, False, False])
    df=df.astype('object')
    df[filter] = np.nan
    df
    Out[623]: 
    0      NaN
    1      NaN
    2    False
    3     True
    dtype: object
    

    更多信息

    df.apply(type)
    Out[625]: 
    0    <class 'float'>
    1    <class 'float'>
    2     <class 'bool'>
    3     <class 'bool'>
    dtype: object