Python 使用.loc查询非空值和仅字符串值

Python 使用.loc查询非空值和仅字符串值,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我试图查询一个数据帧来删除所有的空值和数值(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] 到目前为止,我所能做的只是删除数据帧中的空值,而不是数字值 请提供帮助。与errors='concurve'一

我试图查询一个数据帧来删除所有的空值和数值(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]
到目前为止,我所能做的只是删除数据帧中的空值,而不是数字值

请提供帮助。

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

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)))]

检查解决方案中的差异-
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

另一种方法是使用
0
填充
NaN
,并使用以下方法过滤掉数字:



哦..这就是为什么“isinstance”不起作用..我可以知道为什么数据帧中有一个“~”吗?@Maku-它是用于逆布尔掩码-
True,False
False,True
maskNote:
type(np.nan)
float
,所以我认为这里不需要
notna()
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
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