python - pandas.Series 在应该返回一个元素时返回一个 Series

标签 python numpy pandas

我在使用值为 numpy 数组的 pandas.Series 时遇到了以下奇怪的行为。

% s = pd.Series([5,2], index=[6,7])
%s.loc[6]
5  <-- returning a value of type corresponding to s.dtype, as expected

% s = pd.Series([np.arange(5), np.arange(2)], index=[6,7])
% s.loc[6]
6    0
6    1
6    2
6    3
6    4
dtype: int64  <-- returning a Series instead of a value of type np.array?!

% type(s.loc[6])
pandas.core.series.Series

如果以 s[6] 访问它,则行为相同。

问题:

  1. 甚至允许使用值为 numpy 数组的 Series,还是我一开始就做了坏事?
  2. 这是 pandas 中的错误吗?
  3. 是否有一个简单的解决方法,无论数据类型如何(例如,也适用于 dtype=int 的系列)?

我正在使用 pandas V0.13.1

最佳答案

好的,这看起来像是 0.13.0 中的错误,在 0.14.1 中已修复:

In [110]:

s = pd.Series([np.arange(5), np.arange(2)], index=[6,7])
print(s.loc[6])
type(s.loc[6])

[0 1 2 3 4]
Out[110]:
numpy.ndarray

在返回 Series 的情况下,您可以调用属性 .values ,它将返回一个 numpy 数组,但这仅适用于 Series 返回,如果返回单个元素值将引发错误。

作为解决方法,如果您无法升级,则 get_value 起作用:

In [112]:

s.get_value(6)
Out[112]:
array([0, 1, 2, 3, 4])

关于python - pandas.Series 在应该返回一个元素时返回一个 Series,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884499/

相关文章:

python - 在迭代数据帧时将 pandas 数据帧中的特定行写入 csv 文件

python - 行过滤,以便我们只保留有限的条目

python - 根据django汇率更改价格字段

Python 遗留伯克利数据库

python - 使用 python 添加新列,具体增加四分之一

python - Numpy 就地设置绝对值

python - 重命名多索引列名称Python

python - 如何确保只有在 pytest 中明确要求时才运行带有标记的测试?

查找重叠元素的 Pythonic 方法

python - 在 Python 3 中将逗号分隔的字符串转换为 Numpy 数组