我将某些数据从实木复合地板文件导入到DataFrame中,并希望检查数据类型。我期望的数据类型之一是字符串。为此,我需要执行以下操作:
import pandas as pd
col = pd.Series([None, 'b', 'c', None, 'e'])
assert((col.dtype == object) and (isinstance(col[0], str)))
但是,正如您所看到的,如果我不小心在开头有一个None
值,那么这是行不通的。
有人知道如何有效地做到这一点(最好不必检查系列的每个元素)吗?
答案 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
的值将成为字符串值。