假设我有一个数据帧df1,它有两列:dtypea
的bool
和dtypeb
的int64
。当我初始化来自df1_bis
的新数据帧(df1
)时,列a
和b
将自动转换为对象,即使我强制使用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/