假设我有一个数据帧df1,它有两列:dtypeabool和dtypebint64。当我初始化来自df1_bis的新数据帧(df1)时,列ab将自动转换为对象,即使我强制使用df1_bis的数据类型:

In [2]: df1 = pd.DataFrame({"a": [True], 'b': [0]})
Out[3]:
      a  b
0  True  0

In [4]: df1.dtypes
Out[4]:
a     bool
b    int64
dtype: object

In [5]: df1_bis = pd.DataFrame(df1.values, columns=df1.columns,     dtype=df1.dtypes)
Out[6]:
      a  b
0  True  0

In [7]: df1_bis.dtypes
Out[7]:
a    object
b    object
dtype: object

DataFrame的dtype参数有什么问题吗?

最佳答案

numpy引起了这个问题。pandas正在从numpy数组推断类型。如果你转换成一个列表,就不会有问题。

df1_bis = pd.DataFrame(df1.values.tolist(),
                       columns=df1.columns)


print(df1_bis)
print
print(df1_bis.dtypes)

      a  b
0  True  0

a     bool
b    int64
dtype: object

关于python - 从另一个初始化新的DataFrame时,dtypes发生了变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39221232/

10-09 18:55