检查pandas dataframe列是否为字符串类型

时间:2018-03-07 11:39:14

标签: python string pandas

我有一个相当大的pandas数据帧(11k行和20列)。一列有一个混合数据类型,主要是数字(浮点数),其中散布着一些字符串。

在使用混合列中的数据执行某些统计分析之前,我通过查询其他列来对此数据框进行子集化(但如果存在字符串,则无法执行此操作)。 99%的时间一旦将此列子集化为纯数字,但很少有字符串值最终会出现在我需要捕获的子集中。

通过Pandas混合类型列循环检查字符串的最有效/ pythonic方式是什么(或者相反地检查整个列是否充满数值)?

如果列中只有一个字符串,我想引发错误,否则继续。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这是另一种方式。它将列A的值转换为数字,但不会因错误而失败:字符串被替换为NA。 notnull()可以删除这些NA。

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

但是,如果该列中已经有NA,它们也会被删除。

另请参阅: Select row from a DataFrame based on the type of the object(i.e. str)