我有几个长度不同且包含一些空值的列表系列。以下是一个例子:
In [108]: s0 = pd.Series([['a', 'b'],['c'],np.nan])
In [109]: s0
Out[109]:
0 [a, b]
1 [c]
2 NaN
dtype: object
但是另一个包含所有的NaNs
:
In [110]: s1 = pd.Series([np.nan,np.nan])
In [111]: s1
Out[111]:
0 NaN
1 NaN
dtype: float64
我需要每个列表中的最后一项,这很简单:
In [112]: s0.map(lambda x: x[-1] if isinstance(x,list) else x)
Out[112]:
0 b
1 c
2 NaN
dtype: object
但是在进行索引时,如果没有使用isinstance
,当出现NaNs
时,s0
和s1
的故障表现不同:
In [113]: s0.map(lambda x: x[-1])
...
TypeError: 'float' object is not subscriptable
In [114]: s1.map(lamda x: x[-1])
...
IndexError: invalid index to scalar variable.
有人能解释一下为什么吗?这是个bug吗?我正在使用Pandas 0.16.2和Python 3.4.3。
pd.Series
的工作方式有关,因为尝试使用list
和np.array
复制它只会导致TypeError
。 - DeepSpace