pandas 文档 说:“就像 NumPy 数组一样,pandas 系列有一个 dtype。”但这似乎不是真的。
如果我有一个数据框:
df = pd.DataFrame({
'A': [1, 'a'],
'B': [2, 'b']
})
我打电话给:
type(df['B'])
我明白了
<class 'pandas.core.series.Series'>
。 df['B'].dtype
返回 object
。我对文档的理解是 B 列中的数据应该被强制转换为字符串。事实上,这就是 NumPy 所做的。例如:
arr1 = np.array([1, 'a'])
arr2 = np.array([2, 'b'])
arr1[0] + arr2[0]
结果为 '12'
.type(arr1[0] + arr2[0])
结果为 string
.
然而,在熊猫中:
df['A'][0] + df['B'][0]
结果为 3
(一个整数),这意味着即使我正在处理同时包含整数和字符串的系列,但整数并没有像在 NumPy 中那样被强制转换为字符串。该系列似乎包含不同类型的数据。这与文档要我们相信的相反。
我误会了什么?
文档提到系列是一个一维标记数组,能够保存任何数据类型,例如整数、字符串、浮点数、Python 对象等。此外,它声明,类似于 NumPy 数组,一个系列只有一个数据类型。
因此,虽然 Series 可以包含任何类型的元素数据,但整个系列将由单个 dtype 表示。例如,如果一个系列同时包含整数和浮点数,Pandas 将为整个系列分配一个浮点数据类型。