【问题标题】:Remove values from dataframe if a column contains any string value in Pandas如果列包含 Pandas 中的任何字符串值,则从数据框中删除值
【发布时间】:2018-01-21 16:13:31
【问题描述】:

我想从我的数据框中删除包含 float dtype 列的字符串值的行。例如,如果我有一个金额字段,我想删除数据框中包含金额字段中值为“NA”的所有行。

到目前为止,我已经尝试了以下 -

to_drop = ['NA']
data = data[~data['gross'].isin(to_drop)]

data = data[data.gross.str != 'NA']

我得到“仅使用带有字符串值的 .str 访问器,它在 pandas 中使用 np.object_ dtype”。

这样做的正确方法是什么?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果NA 缺少值(NaN)需要notnulldropna 并指定列以检查NaNs:

    data = pd.DataFrame({'gross':[np.nan,3,5],
                         'a':[2,3,4]})
    
    print (data)
       a  gross
    0  2    NaN
    1  3    3.0
    2  4    5.0
    
    data1 = data[data.gross.notnull()]
    print (data1)
       a  gross
    1  3    3.0
    2  4    5.0
    

    data1 = data.dropna(subset=['gross'])
    print (data1)
       a  gross
    1  3    3.0
    2  4    5.0
    

    或者如果混合值 - 带有字符串的数字首先将所有值转换为 str 或比较 values 创建的 numpy 数组:

    data = pd.DataFrame({'gross':['NA',3,5,'NA'],
                         'a':[2,3,4,8]})
    
    print (data)
       a gross
    0  2    NA
    1  3     3
    2  4     5
    3  8    NA
    
    data2 = data[data.gross.astype(str) != 'NA']
    print (data2)
       a gross
    1  3     3
    2  4     5
    

    data2 = data[data.gross.values != 'NA']
    print (data2)
       a gross
    1  3     3
    2  4     5
    

    【讨论】:

      【解决方案2】:

      IIUC:

      data['gross'] = data.gross.replace('NA',np.nan)
      data = data.dropna()
      

      或者

      data[~data.gross.replace('NA',np.nan).isnull()]
      

      将字符串 'NA' 替换为 NaN,然后​​使用 dropna axis=1 删除这些行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-25
        • 2018-08-18
        • 1970-01-01
        • 2022-11-30
        • 2022-11-04
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多