gpt4 book ai didi

python - 为什么 Pandas 整数 `dtypes` 在 Unix 和 Windows 上的行为不同?

转载 作者:行者123 更新时间:2023-12-03 19:00:51 25 4
gpt4 key购买 nike

在检查 dtypes用于 Pandas 中的列 DataFrame ,我意识到整数列的数据类型是 np.int64 ,但令人惊讶的是,在 Unix 上这等于 int但在 Windows 上不是。为什么他们的行为不一样?有没有办法以一种方式创建 DataFrame,与使用 df.dtypes == int 进行比较时结果相同?
下面是一些示例代码来说明。

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: pd.__version__
Out[3]: '1.0.1'

In [4]: np.__version__
Out[4]: '1.18.1'

In [5]: data = pd.DataFrame({'col_1': range(5), 'col_2': np.linspace(0, 1, 5)})

In [6]: data.dtypes
Out[6]:
col_1 int64
col_2 float64
dtype: object

In [7]: data.dtypes == float
Out[7]:
col_1 False
col_2 True
dtype: bool
所有这些在 Windows 和 Unix 上都会产生相同的结果,但是如果我将 dtypes 与 int 进行比较在 Windows 上我得到
In [8]: data.dtypes == int
Out[8]:
col_1 False
col_2 False
dtype: bool
在 Unix 上我得到
In [8]: data.dtypes == int
Out[8]:
col_1 True
col_2 False
dtype: bool
我尝试指定数据类型。这适用于 Unix,我可以通过添加 dtype=(int, float) 来输入数据类型
In [9]: data = pd.DataFrame({'col_1': range(5), 'col_2': np.linspace(0, 1, 5)}, dtype=(int, float))

In [10]: data.dtypes
Out[10]:
col_1 int64
col_2 float64
dtype: object
但在 Windows 上,此代码失败并显示 ValueError
In [10]: data = pd.DataFrame({'col_1': range(5), 'col_2': np.linspace(0, 1, 5)}, dtype=(int, float))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-284f0f12d3b6> in <module>
----> 1 data = pd.DataFrame({'col_1': range(5), 'col_2': np.linspace(0, 1, 5)}, dtype=(int, float))

~\Miniconda3\envs\pandas_test\lib\site-packages\pandas\core\frame.py in __init__(self, data, index, columns, dtype, copy)
423 data = {}
424 if dtype is not None:
--> 425 dtype = self._validate_dtype(dtype)
426
427 if isinstance(data, DataFrame):

~\Miniconda3\envs\pandas_test\lib\site-packages\pandas\core\generic.py in _validate_dtype(self, dtype)
257
258 if dtype is not None:
--> 259 dtype = pandas_dtype(dtype)
260
261 # a compound dtype

~\Miniconda3\envs\pandas_test\lib\site-packages\pandas\core\dtypes\common.py in pandas_dtype(dtype)
1872 # raise a consistent TypeError if failed
1873 try:
-> 1874 npdtype = np.dtype(dtype)
1875 except SyntaxError:
1876 # np.dtype uses `eval` which can raise SyntaxError

ValueError: mismatch in size of old and new data-descriptor

最佳答案

pandas.DataFrame有一个 dtype范围。

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
您应该能够使用该参数设置特定的数据类型。

关于python - 为什么 Pandas 整数 `dtypes` 在 Unix 和 Windows 上的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64901822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com