检查Pandas Series是否为字符串类型

时间:2020-06-15 15:35:56

标签: python pandas

我将某些数据从实木复合地板文件导入到DataFrame中,并希望检查数据类型。我期望的数据类型之一是字符串。为此,我需要执行以下操作:

import pandas as pd
col = pd.Series([None, 'b', 'c', None, 'e'])
assert((col.dtype == object) and (isinstance(col[0], str)))

但是,正如您所看到的,如果我不小心在开头有一个None值,那么这是行不通的。

有人知道如何有效地做到这一点(最好不必检查系列的每个元素)吗?

3 个答案:

答案 0 :(得分:2)

Pandas 1.0.0开始,有一个StringDtype,可用于检查pd.Series是否包含 only NaN或字符串值:

try:
    col.astype('string')
except ValueError as e:
    raise e

如果您尝试使用包含int的列:

col = pd.Series([None, 2, 'c', None, 'e'])

try:
    col.astype('string')
except ValueError as e:
    raise e

您会得到一个ValueError

ValueError:StringArray需要一个字符串序列或pandas.NA

答案 1 :(得分:1)

您可以使用first_valid_index检索并检查第一个非NA项目:

isinstance(col.iloc[col.first_valid_index()], str)

答案 2 :(得分:0)

您可以将整个series的所有值转换为str类型,如下所示:

col = col.astype(str)

None的值将成为字符串值。