如何在DataFrame列中查找所有独特的数据类型?

8

例如:

df = pd.DataFrame([[int(1),2,3],[int(5),6,'a'],[0.1,4,True]], columns = list("abc"))
df
   a    b  c
0  1.0  2  3
1  5.0  6  a
2  0.1  4  True

副问题:为什么声明 int 不会有任何影响?

现在,df.dtypes 返回

a    float64
b      int64
c     object
dtype: object

但是在一列中列出所有不同的数据类型是否可能?

比如:

a    int64, float64
b    int64
c    int64, str, bool

2
@jpp,啊,太好了。由于某些原因我在SO上找不到那个确切的问题,可能是因为我没有使用"subtypes"这个词。谢谢!但我不只是寻找对象,所以可能会略有不同。像include=[df[c].dtype for c in df.columns] - Raksha
我本来有更好的解决方案,但不能直接回答(感谢stackoverflow),抱歉啊。 - ChrisDelClea
1个回答

6
您可以使用.applymap(type)来获取一个包含原始数据框中每个值类型的数据框:
df = pd.DataFrame([[1, 2, 3],[5, 6, 'a'],[0.1, 4, True]], columns = list("abc"))

print(df.applymap(type))

输出

                 a              b               c
0  <class 'float'>  <class 'int'>   <class 'int'>
1  <class 'float'>  <class 'int'>   <class 'str'>
2  <class 'float'>  <class 'int'>  <class 'bool'>

副问题:为什么声明int不起作用?

在Python中,没有“声明”这个概念。 int(1)1 (几乎) 没有任何区别。列a显示为float64,因为最后一个元素是0.1。这会导致pandas15转换为float(因为0.1无法转换为int)。


有没有一行代码可以对每一列执行.unique()操作,这样就可以实现了。 - Raksha
@Raksha 这应该是一个单独的问题,具有自己的预期输入和输出。 - DeepSpace
1
你是什么意思?那是问题 >.> ... 预期的结果只列出唯一的结果,而不是每个条目都有一个 <.< - Raksha
@Raksha,原始问题是关于类型的,没有以任何方式提到唯一性。 - DeepSpace
1
这个展示的结果暗示了这一点 XD。 - Raksha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接