【发布时间】:2016-03-27 15:57:08
【问题描述】:
我有几个带有一些空值的可变长度列表。一个例子是:
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.
谁能解释为什么?这是一个错误吗?我正在使用 Pandas 0.16.2 和 Python 3.4.3。
【问题讨论】:
-
有趣的问题。它与
pd.Series的工作方式有关,因为尝试使用list和np.array复制它只会导致TypeError。 -
您尝试过使用元组而不是列表吗?根据我的经验,数据框中的元组工作得更好。不确定这是否解决了您的问题,因为我没有尝试重新创建
标签: python exception pandas indexing nan