如何在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)
是一个NumPycomplex128
对象。您需要将值与本机NumPy数据类型一起使用,以获取df.dtypes
报告非对象数据类型。对于偶然发现此问题的任何其他人,您可以使用df.apply(pd.to\u numeric)