我如何检测pandas对象列中的子类型?

Bor*_*elo 5 python pandas

我有下一个DataFrame:

df = pd.DataFrame({'a': [100, 3,4], 'b': [20.1, 2.3,45.3], 'c': [datetime.time(23,52), 30,1.00]})
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想在没有显式编程循环的情况下检测列中的子类型.

我正在寻找下一个输出:

column a = [int]
column b = [float]
column c = [datetime.time, int, float]
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 8

你应该意识到,使用Pandas,你可以拥有两大类系列:

  1. 优化结构:通常是数字数据,包括np.datetime64bool.
  2. objectdtype:用于具有不能在NumPy数组中本机保存的混合类型或类型的系列.该系列结构为一系列指向任意Python对象的指针,通常效率低下.

这个序言的原因是你应该只需要将元素逻辑应用于第二种类型.第一类数据本质上是同质的.

所以你应该相应地分开你的逻辑.

常规dtypes

用途pd.DataFrame.dtypes:

print(df.dtypes)

a      int64
b    float64
c     object
dtype: object
Run Code Online (Sandbox Code Playgroud)

object D型

通过这些系列隔离pd.DataFrame.select_dtypes,然后使用字典理解:

obj_types = {col: set(map(type, df[col])) for col in df.select_dtypes(include=[object])}

print(obj_types)

{'c': {int, datetime.time, float}}
Run Code Online (Sandbox Code Playgroud)

您需要做更多的工作才能获得所需的确切格式,但上述内容应该是您的攻击计划.