2015-06-04 27 views
5

मुझे यह स्पष्ट रूप से सरल सवाल पूछने में खेद है, लेकिन मैं एक अजगर शुरुआत करने वाला हूं और कहीं भी जवाब नहीं ढूंढ पा रहा हूं। मैं अगर बयान एक सरल चलाना चाहते हैं, लेकिन अजगर रिटर्न बस:पायथन अगर कथन मूल्य त्रुटि देता है

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

कोई फर्क नहीं पड़ता दी विकल्प मैं लागू की जो - यह सिर्फ काम नहीं करता। आपके पास कोई विचार है?

import pandas as pd 

    df = pd.DataFrame({'a': [None] * 4, 'b': [2, 3, 10, 3]}) 

    df["c"] =0  
    if df.b == 2: 
     df.c =1 

उत्तर

2

आपको लगता है कि if का उपयोग कर इसे अगर कोई एक मान से मेल खाता है या सब एक है, लेकिन आप की तरह कुछ करना चाहता हूँ क्या के रूप में अस्पष्ट हो जाता है की तरह एक सरणी के साथ एक अदिश तुलना नहीं कर सकते:

In [3]: 

df['c'] = np.where(df['b'] == 2, 1, np.NaN) 
df 
Out[3]: 
     a b c 
0 None 2 1 
1 None 3 NaN 
2 None 10 NaN 
3 None 3 NaN 

np.where का उपयोग कर कि हालत के लिए पूरी सरणी में और अगर True रिटर्न 1 लग रहा है, अन्यथा NaN

आप की तरह सिंटेक्स के उपयोग की तुलना कर सकते हैं:

In [4]: 

df['b'] == 2 
Out[4]: 
0  True 
1 False 
2 False 
3 False 
Name: b, dtype: bool 

नहीं बल्कि if का उपयोग कर जब तक आप एक एकल मान तुलना कर रहे हैं:

In [8]: 

for index, row in df.iterrows(): 
    if row['b'] == 2: 
     print('equals 2') 
    else: 
     print('some other value') 
equals 2 
some other value 
some other value 
some other value 
+0

बहुत बहुत धन्यवाद, यही वह है! –

3

if बयान में आप अदिश के साथ एक सरणी तुलना करने के लिए कोशिश कर रहे हैं। आप की तरह

if df.b[0] == 2: 
    df.c =1 

या

if 2 in df.b: 
    df.c =1 

आप सरणी में किसी विशिष्ट तत्व के लिए जाँच करना चाहते हैं तो कुछ का उपयोग कर सकते हैं।

0

आप अगर df.b जाँच करने के लिए कोशिश कर रहे हैं, एक List, एक int के बराबर है।

इस प्रयास करें:

if 2 in df.b: 
    df.c=1 
1

आप df.b सेट चार नंबर युक्त एक सूची होने के लिए। यह कभी भी एक संख्या के बराबर नहीं हो सकता है।

और पांडा == का उपयोग करके किसी भी सूची की तुलना किसी सूची में तुलना नहीं कर सकते हैं क्योंकि यह स्पष्ट नहीं है कि आप क्या जवाब चाहते हैं, इसलिए यह आपको समझाने के लिए प्रेरित कर रहा है।

http://pandas.pydata.org/pandas-docs/stable/gotchas.html

मुझे नहीं लगता कि आपको लगता है कि सब पर ऐसा करने के लिए कोशिश कर रहे हैं, लेकिन यह स्पष्ट नहीं है आप क्या होने की उम्मीद कर रहे हैं।

0

ठीक है, पहले बंद करें। आप एक संपूर्ण शब्दकोश पर एक सशर्त उपयोग करने की कोशिश कर रहे हैं!

आप मूल रूप से कह रहे हैं "अगर यह घाटा == 2", जो कि केवल एक संदिग्ध कथन है क्योंकि वह शब्दकोश (डीएफ.बी) मूल्यों का एक सेट है, जो आवश्यक रूप से "सत्य" का मूल्यांकन नहीं करता है ..

डीएफ।बी

0  2 
1  3 
2 10 
3  3 

ईमानदारी से, आपके प्रश्न के आधार पर, मुझे पूरी तरह से यकीन नहीं है कि आप मूल्यांकन करने की कोशिश कर रहे हैं! Df.b के उप-संकोचन में मूल्यांकन करने से पहले आपको डीएफ प्रिंट करने का प्रयास करना चाहिए।

संबंधित मुद्दे