假设我有一个包含 2 列的 DataFrame df1:a
的 dtype bool
和 b
的 dtype int64
。当我从 df1
初始化一个新的 DataFrame (df1_bis
) 时,列 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
参数是不是我做错了什么?
最佳答案
对我来说作品:
df1_bis = pd.DataFrame(df1, columns=df1.columns, index=df1.index)
#df1_bis = pd.DataFrame(df1)
print (df1_bis)
a b
0 True 0
print (df1_bis.dtypes)
a bool
b int64
dtype: object
但我认为更好的做法是使用 copy
:
df1_bis = df1.copy()
如果你想使用dtype
,你需要使用Series
因为DataFrame
中的参数dtype
适用于所有列:
df1_bis = pd.DataFrame({'a':pd.Series(df1.a.values, dtype=df1.a.dtypes),
'b':pd.Series(df1.b.values, dtype=df1.b.dtypes)}
, index=df1.index)
print (df1_bis)
a b
0 True 0
print (df1_bis.dtypes)
a bool
b int64
dtype: object
df = pd.DataFrame({"a": [1,5], 'b': [0,4]}, dtype=float)
print (df)
a b
0 1.0 0.0
1 5.0 4.0
print (df.dtypes)
a float64
b float64
dtype: object
关于python - 从另一个 DataFrame 初始化一个新的 DataFrame 时 dtypes 改变了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39221232/