如何在python中检查列内容的数据类型?

如何在python中检查列内容的数据类型?,python,pandas,dataframe,types,Python,Pandas,Dataframe,Types,这个问题涉及到 将创建一个空数据帧。接下来,它将充满数据。然后如何检查其任何列是否包含复杂类型 index = [np.array(['foo', 'qux'])] columns = ["A", "B"] df = pd.DataFrame(index=index, columns=columns) df.loc['foo']["A"] = 1 + 1j df.loc['foo']["B"] = 1 df.loc['qux']["A"] = 2 df.loc['qux']["B"] = 2

这个问题涉及到

将创建一个空数据帧。接下来,它将充满数据。然后如何检查其任何列是否包含复杂类型

index = [np.array(['foo', 'qux'])]
columns = ["A",  "B"]
df = pd.DataFrame(index=index, columns=columns)
df.loc['foo']["A"] = 1 + 1j
df.loc['foo']["B"] = 1
df.loc['qux']["A"] = 2
df.loc['qux']["B"] = 2

print df
for type in df.dtypes:
    if type == complex:
        print type
目前,我得到的类型是
object
,它没有用处

          A  B
foo  (1+1j)  1
qux       2  2

考虑系列
s

s = pd.Series([1, 3.4, 2 + 1j], dtype=np.object)
s

0         1
1       3.4
2    (2+1j)
dtype: object
如果我使用
pd.to_numeric
,它会将
dtype
向上投射到
complex
(如果有)

pd.to_numeric(s).dtype

dtype('complex128')

您必须执行
type(df['A'].iloc[0])
假设所有值都相同,那么
np.object
dtype用于python对象表示您可以执行
isinstance(df.A.iloc[0],complex)
?@EdChum在我的例子中,有些值是真实的,有些是复杂的!混合数据类型会有问题,此外,如果类型不是numpy友好类型,您会发现您将失去使用pandas的性能增益,这意味着您将失去矢量化操作,您将获得的只是更容易的索引语义
(1+1j)
是一个简单的Python
复杂对象
np.complex128(1+1j)
是一个NumPy
complex128
对象。您需要将值与本机NumPy数据类型一起使用,以获取
df.dtypes
报告非对象数据类型。对于偶然发现此问题的任何其他人,您可以使用
df.apply(pd.to\u numeric)