确定Pandas Column DataType

cod*_*000 12 python dataframe pandas

有时,当数据导入到Pandas Dataframe时,它总是作为类型导入object.这很好,适合做大多数操作,但我正在尝试创建自定义导出功能,我的问题是:

  • 有没有办法强制Pandas推断输入数据的数据类型?
  • 如果没有,加载数据后是否有办法以某种方式推断数据类型?

我知道我可以告诉Pandas这是int,str等类型..但是我不想这样做,我希望当用户导入或添加列时,pandas可以足够聪明地知道所有数据类型.

编辑 - 导入的例子

a = ['a']
col = ['somename']
df = pd.DataFrame(a, columns=col)
print(df.dtypes)
>>> somename    object
dtype: object
Run Code Online (Sandbox Code Playgroud)

类型应该是字符串?

lmo*_*lmo 17

这只是部分答案,但您可以在整个DataFrame中获取变量中元素的数据类型的频率计数,如下所示:

dtypeCount =[df.iloc[:,i].apply(type).value_counts() for i in range(df.shape[1])]
Run Code Online (Sandbox Code Playgroud)

这回来了

dtypeCount

[<class 'numpy.int32'>    4
 Name: a, dtype: int64,
 <class 'int'>    2
 <class 'str'>    2
 Name: b, dtype: int64,
 <class 'numpy.int32'>    4
 Name: c, dtype: int64]
Run Code Online (Sandbox Code Playgroud)

它不能很好地打印,但您可以按位置提取任何变量的信息:

dtypeCount[1]

<class 'int'>    2
<class 'str'>    2
Name: b, dtype: int64
Run Code Online (Sandbox Code Playgroud)

这应该让你开始找到导致问题的数据类型以及有多少数据类型.

然后,您可以使用在第二个变量中检查具有str对象的行

df[df.iloc[:,1].map(lambda x: type(x) == str)]

   a  b  c
1  1  n  4
3  3  g  6
Run Code Online (Sandbox Code Playgroud)

数据

df = DataFrame({'a': range(4),
                'b': [6, 'n', 7, 'g'],
                'c': range(3, 7)})
Run Code Online (Sandbox Code Playgroud)