Python 使用.loc查询非空值和仅字符串值
我试图查询一个数据帧来删除所有的空值和数值(int,float) 我的数据帧: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'一
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