检查pandas数据框中的列是否为字符串类型。

3
我有一个相当大的pandas数据框(11k行和20列)。其中一列具有混合数据类型,主要是数值型(浮点数),但散布着少量字符串。
我通过查询其他列对该数据框进行子集处理,然后使用混合列中的数据执行一些统计分析(如果存在字符串,则无法执行此操作)。99%的时间,在子集处理后,该列仅包含数字,但偶尔会在子集中出现字符串值,我需要捕获它们。
循环遍历Pandas混合类型列以检查字符串(或相反检查整列是否全为数值)的最有效/Pythonic方法是什么?
如果列中有任何一个字符串,则我想引发错误,否则继续。

1
你可以尝试将其转换为浮点数吗?df['col_test'].astype(float) - emmet02
是的,我已经在做这个并捕获类型和值错误,我只是在寻找另一种方法,但我可能已经有了解决方案。我想知道pandas是否有一个内置的方法,例如(尽管我在文档中找不到它)。 - Altycoder
另外我应该补充一下,转换类型会告诉我有问题,但不一定会告诉我有多少个字符串或它们的索引,这可能是我下一步要做的。 - Altycoder
2个回答

3

这是一种方法。我不确定它是否可以矢量化。

import pandas as pd

df = pd.DataFrame({'A': [1, None, 'hello', True, 'world', 'mystr', 34.11]})

df['stringy'] = [isinstance(x, str) for x in df.A]

#        A stringy
# 0      1   False
# 1   None   False
# 2  hello    True
# 3   True   False
# 4  world    True
# 5  mystr    True
# 6  34.11   False

0

这里有一种不同的方法。它将列A的值转换为数字,但在出现错误时不会失败:字符串被替换为NA。 notnull()用于删除这些NA。

df = df[pd.to_numeric(df.A, errors='coerce').notnull()]

然而,如果该列中已经存在NA值,则它们也将被删除。

另请参阅: 根据对象类型(即str)从DataFrame中选择行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接