Как правильно передавать данные в функции с помощью pandas? Код ниже в настоящее время приводит к ошибке:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
Все, что я хочу сделать, это создать выходную матрицу со строками, подчиняющимися условным операторам в функции.
def mixtapeFire(timesPlayed, rating):
if timesPlayed >=1000 & rating >=3:
print('Your mixtape is fire!')
if rating >5:
print('Invalid Input. Play Again.')
else:
print('You should quit the rap game.')
input1 = pd.DataFrame([900,2000,1001,500,4000])
input2 = pd.DataFrame([3,4,3,1,2])
for x in range(1,5):
output = pd.DataFrame(mixtapeFire(input1.iloc[x,:],input2.iloc[x,:]))
a = pd.DataFrame([900,2000,1001,500,4000])
b = pd.DataFrame([3,4,3,1,2])
Сравнение ряда приводит к нескольким значениям.
In [12]: a >= 1000
Out[12]:
0
0 False
1 True
2 True
3 False
4 True
In [13]: b >= 3
Out[13]:
0
0 True
1 True
2 True
3 False
4 False
In [14]: q = (a >= 1000) & (b >= 3)
In [15]: q
Out[15]:
0
0 False
1 True
2 True
3 False
4 False
Используйте .any()
или .all()
в зависимости от того, что вы хотите.
In [16]: q.any()
Out[16]:
0 True
dtype: bool
In [17]: q.all()
Out[17]:
0 False
dtype: bool
Поскольку в результате есть несколько значений True/False
, Это не может сказать, является ли вся серия True
или False
.
In [18]: bool(q)
Traceback (most recent call last):
File "<ipython-input-18-6fd0a485fec6>", line 1, in <module>
bool(q)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 955, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Большое спасибо! Это прекрасно работающее решение, но мне было интересно, есть ли способ сделать это и сохранить функцию. Например, если функция намного сложнее, ее воспроизведение может занять целую вечность.
Вы можете использовать тот же процесс, который я показал в функции. Вам просто нужно применить свою логику и сравнительные значения в соответствии с вашими потребностями. Из вашего вопроса или вашего примера неясно, каковы были ваши требования/желания.
Да, извините, теперь, когда я смотрю на это снова, это не очень четко сформулировано. Короче говоря, я хотел научиться выполнять многоклассовую классификацию с помощью классификатора функций [например, дерева решений] и нескольких входных данных. Цель состояла бы в том, чтобы создать выходной массив со строковыми метками, которые сказали бы нам, что есть что.
Возможно, вам следует удалить этот вопрос и задать тот, который правильно отражает вашу проблему / проблему.
В зависимости от ваших потребностей вы можете применить любой из методов «a» к своим аргументам input1.iloc[x,:],input2.iloc[x,:]. Например:
output = pd.DataFrame(mixtapeFire(input1.iloc[x,:].all(),input2.iloc[x,:].all()))
Вы можете узнать больше о методах доступа панд из официальных документов https://pandas.pydata.org/pandas-docs/stable/reference/series.html
Но в двух словах: вам нужно более конкретно указать, какие значения вы хотите проанализировать.
Пожалуйста, исправьте отступ вашего примера.