我有一个大型数据框,在阅读时,它会给我这样的信息: DtypeWarning:列(0,8)具有混合类型。导入时指定dtype或设置low_memory = False。
它应该是一列漂浮物,但我怀疑有一些字符串在那里偷偷摸摸。我想识别它们,并可能删除它们。
我试过了 df.apply(lambda row:isinstance(row.AnnoyingColumn,(int,float)),1)
但这给了我一个内存不足的错误。
我认为必须有更好的方法。
答案 0 :(得分:3)
如果浮动,这将给你True:
df.some_column.apply(lambda x: isinstance(x, float))
如果是int或string,这将给你True:
df.some_column.apply(lambda x: isinstance(x, (int,str)))
所以,删除字符串:
mask = df.some_column.apply(lambda x: isinstance(x, str))
df = df[~mask]
删除浮点数和字符串的示例:
$ df = pd.DataFrame({'a': [1,2.0,'hi',4]})
$ df
a
0 1
1 2
2 hi
3 4
$ mask = df.a.apply(lambda x: isinstance(x, (float,str)))
$ mask
0 False
1 False
2 True
3 False
Name: a, dtype: bool
$ df = df[~mask]
$ df
a
0 1
3 4