【问题标题】:using .loc to query not null values and string only values使用 .loc 查询非空值和仅字符串值
【发布时间】:2019-05-21 06:55:46
【问题描述】:

我正在尝试查询数据框以删除所有空值和数字(int、float)值。

我的数据框:

make_df = ["Hello", "World", "abcd", 12.4, np.nan,  "qwerty123"]
df = pd.DataFrame(make_df, columns = ["col1"])

我的代码:

df.loc[df["col1"].isna() == False]

到目前为止,我所能做的就是删除 DataFrame 中的空值,而不是数值。

请帮忙。

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    to_numericerrors='coerce' 一起使用,测试未缺失值与测试未缺失值链接:

    df1 = df[pd.to_numeric(df["col1"], errors='coerce').isna() & df["col1"].notna()]
    

    如果需要区分数字和数值的字符串表示,也可以通过isinstance 进行测试:

    df1 = df[~df['col1'].apply(lambda x: isinstance(x, (float, int)))]
    

    print (df1)
            col1
    0      Hello
    1      World
    2       abcd
    5  qwerty123
    

    检查解决方案的差异 - 10 是数字的字符串代表:

    make_df = ["Hello", "World", "abcd", 12.4, np.nan,  "qwerty123", "10"]
    df = pd.DataFrame(make_df, columns = ["col1"])
    print (df)
            col1
    0      Hello
    1      World
    2       abcd
    3       12.4
    4        NaN
    5  qwerty123
    6         10
    
    df1 = df[pd.to_numeric(df["col1"], errors='coerce').isna() & df["col1"].notna()]
    print (df1)
            col1
    0      Hello
    1      World
    2       abcd
    5  qwerty123
    
    df2 = df[~df['col1'].apply(lambda x: isinstance(x, (float, int)))]
    print (df2)
            col1
    0      Hello
    1      World
    2       abcd
    5  qwerty123
    6         10
    

    【讨论】:

    • 哦..这就是为什么“isinstance”不起作用..我可以知道为什么数据框中有一个“~”吗?
    • @Maku - 用于反布尔掩码 - True, FalseFalse, True 掩码
    • 注意:type(np.nan)float,所以我认为这里不需要notna()
    【解决方案2】:

    另一种方法是用0 填充NaN 并使用pd.to_numeric 过滤掉数字:

    df.loc[pd.to_numeric(df.col1.fillna(0),errors='coerce').isna(),'col1']
    

    0        Hello
    1        World
    2         abcd
    5    qwerty123
    Name: col1, dtype: object
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 2018-07-04
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多