Python 从另一个数据帧初始化新数据帧时,数据类型已更改
假设我有一个数据帧df1,它有两列:Python 从另一个数据帧初始化新数据帧时,数据类型已更改,python,pandas,dataframe,casting,multiple-columns,Python,Pandas,Dataframe,Casting,Multiple Columns,假设我有一个数据帧df1,它有两列:a和b以及dtypeint64。当我从df1初始化新的数据帧(df1\u bis)时,列a和b会自动转换为对象,即使我强制使用df1\u 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]
a
和b
以及dtypeint64
。当我从df1
初始化新的数据帧(df1\u bis
)时,列a
和b
会自动转换为对象,即使我强制使用df1\u 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
但我认为更好的方法是使用:
如果要使用dtype
,则需要使用Series
,因为中的参数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
是
numpy
导致了问题<代码>熊猫正在从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
或df1\u bis=df1.copy()
(默认情况下为深度复制)
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
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