如果满足一些条件,我试图用常数填充一个熊猫系列。作为简化的测试用例,我将使用以下内容:
'-'*pd.Series([True]*5, dtype=bool)
这导致:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-89-0e3400ddc239> in <module>()
----> 1 '-'*pd.Series([True]*5, dtype=bool)
C:\Anaconda\lib\site-packages\pandas\core\ops.pyc in wrapper(left, right, name)
529 if hasattr(lvalues, 'values'):
530 lvalues = lvalues.values
--> 531 return left._constructor(wrap_results(na_op(lvalues, rvalues)),
532 index=left.index, name=left.name,
533 dtype=dtype)
C:\Anaconda\lib\site-packages\pandas\core\ops.pyc in na_op(x, y)
476 result = np.empty(len(x), dtype=x.dtype)
477 mask = notnull(x)
--> 478 result[mask] = op(x[mask], y)
479 else:
480 raise TypeError("{typ} cannot perform the operation {op}".format(typ=type(x).__name__,op=str_rep))
TypeError: only integer arrays with one element can be converted to an index
但是,如果我这样做:
'-'*pd.Series([True]*5, dtype=bool).astype(object)
我得到了预期的结果:
0 -
1 -
2 -
3 -
4 -
dtype: object
有人可以向我解释发生了什么事吗?我可能选择了一种尴尬的做法吗?
答案 0 :(得分:0)
我认为您使用*
运算符选择了一种笨拙的方法。使用pandas.Series.map可能更容易吗?
例如。
pd.Series([True]*5,dtype=bool).map( lambda x : '-' if x else None )
如果你开始使用*
运算符,我会注意到你可以在两个向量上使用它,而不是在标量+向量上使用它:
my_filter = pd.Series([True]*5,dtype=bool)
pd.Series('-',index=my_filter.index) * my_filter
或者(或多或少地确定)如果您在前面调整dtype
,它会起作用:
'-' * pd.Series([True]*5,dtype=object)