为什么在 Pandas 数据框中应用更改 dtype 会发生变化?

13

我有以下数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame(dict(A = np.arange(3), 
                         B = np.random.randn(3), 
                         C = ['foo','bar','bah'], 
                         D = pd.Timestamp('20130101')))

print(df)

   A         B    C          D
0  0 -1.087180  foo 2013-01-01
1  1 -1.343424  bar 2013-01-01
2  2 -0.193371  bah 2013-01-01

列的dtypes

print(df.dtypes)
A             int32
B           float64
C            object
D    datetime64[ns]
dtype: object

然而,在使用 apply 后,它们都会变成 object 类型:

print(df.apply(lambda x: x.dtype))
A    object
B    object
C    object
D    object
dtype: object

为什么dtypes被强制转换为对象?我认为在apply中只应考虑列。

pandas 0.17.1
python 3.4.3


1个回答

12
你可以使用参数reduce=False,更多信息请参见此处
print (df.apply(lambda x: x.dtype, reduce=False))

A             int32
B           float64
C            object
D    datetime64[ns]
dtype: object

在较新版本的pandas中,可以使用以下语法:

print (df.apply(lambda x: x.dtype, result_type='expand'))

谢谢,我在搜索时没有找到。 - Anton Protopopov
尽管 pandas v1.0+文档声称result_type参数"仅在axis=1(列)时起作用",但这对我仍然有效(将axis保留为默认值=0)。 - johnDanger
使用较旧版本的Pandas 0.16.2时,即使设置了reduce=Falseapply()仍会将我的np.Int64值转换为int - Lucas

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