2013-03-25 2 views
1

Это похоже на ошибку в pandas.Series.all мне (df является Панда DataFrame объекта, и pd представляет собой сокращенная pandas):«TypeError: только длина-1 Массивы могут быть преобразованы в Python скаляры»

In [18]: df.foo.apply(lambda x: x.startswith(u'bar').head() 
Out[18]: 
0 True 
1 False 
2 True 
3 True 
4 False 
Name: foo 

In [19]: (df.baz == u'frobozz').head() 
Out[19]: 
0 False 
1 False 
2 True 
3 True 
4 False 
Name: baz 

In [20]: (type(Out[20]), type(Out[19])) 
Out[20]: (pandas.core.series.Series, pandas.core.series.Series) 

In [21]: pd.Series.all(Out[18], Out[19]) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-310-d132f431d45f> in <module>() 
----> 1 pd.Series.all(Out[18], Out[19]) 

/home/jones/.virtualenvs/proj/local/lib/python2.7/site-packages/pandas/core/series.pyc in f(self, *args, **kwargs) 
    276  @Appender(func.__doc__) 
    277  def f(self, *args, **kwargs): 
--> 278   result = func(self, *args, **kwargs) 
    279   if isinstance(result, np.ndarray) and result.ndim == 0: 
    280    # return NumPy type 

/home/jones/.virtualenvs/proj/local/lib/python2.7/site-packages/numpy/core/_methods.pyc in _all(a, axis, dtype, out, keepdims) 
    28 def _all(a, axis=None, dtype=None, out=None, keepdims=False): 
    29  return um.logical_and.reduce(a, axis=axis, dtype=dtype, out=out, 
---> 30         keepdims=keepdims)                              
    31 
    32 def _count_reduce_items(arr, axis): 

TypeError: only length-1 arrays can be converted to Python scalars 

Что происходит?

+0

+1 Я не знал, что вы можете использовать Out [14] и т. Д. В качестве переменных. –

+0

@ AndyHayden: Идея заключается в том, что ipython заимствован из Mathematica (который, на мой взгляд, устанавливает стандарт для графических интерфейсов любого типа и делал это в течение последних 20 лет или около того). BTW, как и 'Out', можно рассматривать как массив, поэтому он может' In', хотя его содержимое не так полезно. Одна (по общему признанию, надуманная) ситуация, в которой 'In' могла бы быть удобной, была бы, например, если' In [10] 'является сложным выражением, включающим' x', назовем его 'E (x)' для краткости, а значение 'x' изменилось с тех пор, как' In [10] 'была оценена (чтобы получить то, что теперь находится в' Out [10] ') .... – kjo

+0

Тогда можно было бы запустить' eval (In [10]) ', чтобы получить обновленное значение для 'E (x)'. IOW, 'In' можно рассматривать как« адресуемую »форму истории взаимодействия, которая позволяет получить конкретное входное выражение без необходимости линейного (обратного) обхода истории с помощью стрелки вверх , – kjo

ответ

1

Это не похоже, ошибка для меня, но я не знаю, что вы думаете pd.Series.all(Out[18], Out[19]) делает.

>>> pd.Series.all? 
Type:  instancemethod 
String Form:<unbound method Series.all> 
File:  /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.10.1-py2.7-macosx-10.6-intel.egg/pandas/core/series.py 
Definition: pd.Series.all(self, *args, **kwargs) 
Docstring: 
a.all(axis=None, out=None) 

Returns True if all elements evaluate to True. 

Вы используете версию из класса, так что первый аргумент интерпретируется как, например, а второй в качестве оси. pandas пытается преобразовать второй Series, вы переходите к целому числу, чтобы понять его как ось, которая не может работать, если массив имеет длину> 1.

1

Из документа dd pd.Series.all, кажется, принадлежит только один объект серии. Попробуйте это -

pd.Series.all(Out[18].append(Out[19])) 
Смежные вопросы

 Смежные вопросы