gpt4 book ai didi

python - 如果 Pandas Series 使用 numpy,我如何在 Pandas Series 中拥有不同的类型?

转载 作者:行者123 更新时间:2023-12-01 09:05:04 25 4
gpt4 key购买 nike

据我所知numpys ndarrays元素必须是相同类型且 pandas 系列使用 ndarray来保持值(value)观。但似乎我能够将一个整数附加到包含字符串的系列中。

我有示例代码..

import pandas as pd

sr = pd.Series(['foo'])
sr = sr.append(pd.Series([1], index=[1]))
print(type(sr.values))
print(sr.values.dtype)
print(type(sr.iloc[0]))
print(type(sr.iloc[1]))

和输出:

<class 'numpy.ndarray'>
object
<class 'str'>
<class 'int'>

如果 ndarrays 类型是 object,为什么索引 loc 1 处的项会返回 int?

最佳答案

object dtype 系列由指向任意 Python 对象的指针组成。想想object dtype 的方式与 Python 列表的方式相同。例如,Python 列表 ['foo', 1]不将值存储在连续的内存块中。

同样,您无法将特定数据类型附加到 list ,即使所有元素都属于同一类型,Pandas object系列包含指向任意数量类型的指针。

一般来说,Pandas 数据类型会更改为适应值。因此,向整数系列添加浮点值会将整个系列变为 float 。将字符串添加到数字系列将强制该系列为 object 。您甚至可以强制数字系列具有 object dtype,尽管不推荐这样做:

s = pd.Series(list(range(100000)), dtype=object)

一旦您开始使用 object,Pandas 的主要优势(即矢量化计算)就会消失。系列。应尽可能避免这些。例如,您可以使用 pd.Categorical如果适用的话,对类别进行因式分解。

这是一个演示性能下降的简单示例:

t = pd.Series(list(range(100000)))

%timeit s*10 # 7.31 ms
%timeit t*10 # 366 µs

相关:Strings in a DataFrame, but dtype is object

关于python - 如果 Pandas Series 使用 numpy,我如何在 Pandas Series 中拥有不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52129791/

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