python - 从另一个 DataFrame 初始化一个新的 DataFrame 时 dtypes 改变了

标签 python pandas dataframe casting multiple-columns

假设我有一个包含 2 列的 DataFrame df1:a 的 dtype boolb 的 dtype int64。当我从 df1 初始化一个新的 DataFrame (df1_bis) 时,列 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 参数是不是我做错了什么?

最佳答案

对我来说作品:

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/

相关文章:

python - 如果值为零,则从库存(字典)中删除项目

python - Python 词典帮助

c++ - C++ 中 M 个盒子中 N 个球的排列

python-3.x - 有条件地分割长行的最 Pythonic/最有效的方法是什么?

python - 如何将 pandas DataFrame 的列转换为列表列表?

python - 过滤掉字符串匹配之前的所有行

python - 使用shutil.copyfile复制受限文件,无需成为Python的root用户

python - 重新采样 Pandas 列日期时间

python - 随机日期和月份,但保留年份和时间间隔

python - 填写数据框中缺失的日期