2017-07-21 4 views
5

मेरे पास मेरे डेटाफ्रेम में एक कॉलम है जहां मूल्य 1, 0, False पर लेते हैं लेकिन False या O वाली पंक्तियां कार्यात्मक रूप से भिन्न होती हैं।मिश्रित मानों के साथ डेटाफ्रेम में 0 और झूठी के बीच अंतर करने का आसान तरीका

इसलिए मैं कन्वर्ट करने के लिए चाहते हैं या तो कुछ और करने के लिए False या 0 मूल्यों

क्या यह करने के लिए एक अच्छा तरीका क्या होगा?

की जगह का उपयोग अच्छी तरह से काम नहीं किया है

df["col_name"] = df["col_name"].replace(0,2) धर्मान्तरित False मान भी

और

df["col_name"] = df["col_name"].replace(False,2) धर्मान्तरित 0 मान भी

उत्तर

6

आप mask उपयोग कर सकते हैं एक boolean mask साथ मूल्यों को बदलने के लिए - इस समाधान का लाभ नहीं मूल types बदल रहे हैं: dict द्वारा Series.replace साथ

df = pd.DataFrame({'Col':[1, False, 0]}) 

df['Col'] = df['Col'].mask(df['Col'].astype(str) == '0', 2).replace(False, 3) 
print (df) 
    Col 
0 1 
1 3 
2 2 

समाधान है, लेकिन पहले astype द्वारा str में कनवर्ट भी काम करता है, लेकिन आम तौर पर यह str के सभी मूल्यों को परिवर्तित क्या वास्तविक डेटा के साथ समस्या हो सकती है।

df = pd.DataFrame({'Col':[1, False, 0, True,5]}) 
print (df) 
    Col 
0  1 
1 False 
2  0 
3 True 
4  5 

m = df['Col'].apply(lambda x: isinstance(x, bool)) 
df['Col'] = df['Col'].mask(m, df['Col'].map({False:2, True:3})) 

print (df) 
    Col 
0 1 
1 2 
2 0 
3 3 
4 5 
4

के उपयोग करते हैं astype:

df = pd.DataFrame({'Datavalue':[1,False,0]}) 

df.Datavalue.astype(str) == "0" 

आउटपुट:

0 False 
1 False 
2  True 
Name: Datavalue, dtype: bool 

df.loc[df.Datavalue.astype(str) == "0",'Datavalue'] = "Zero" 

आउटपुट:

Datavalue 
0   1 
1  False 
2  Zero 
4

आप str प्रकार में बदलने और उसके बाद का उपयोग कर सकते df.str.replace:

In [223]: df = pd.DataFrame({'Col':[1, False, 0]}) 

In [224]: df.Col.astype(str).replace('0', 'Zero').replace('False', np.nan) 
Out[224]: 
0  1 
1  NaN 
2 Zero 
3

उपयोग jezrael के dataframe df

df = pd.DataFrame({'Col':[1, False, 0]}) 

विकल्प 1
वहाँ तीन ही कर रहे हैं:

d = {'0':'Zero', 'False':False} 
df = df['Col'].astype(str).replace(d) 
print (df) 
0  1 
1 False 
2  Zero 
Name: Col, dtype: object 

मैं map के साथ और अधिक सामान्य समाधान बना सकते हैं और isinstance द्वारा bools जाँच करने का प्रयास मूल्य, 1 , 0, या गलत, फिर प्रकार bool की जा रही है जा रहा है False

df.Col.mask(df.Col.apply(type) == bool, 2) 

0 1 
1 2 
2 0 
Name: Col, dtype: object 

विकल्प 2
आप pythonis ऑपरेटर

False is 0 

False 

का उपयोग और mask उपयोग कर सकते हैं के रूप में के रूप में अच्छा है जैसा कि हमारे पास

0 से पहले था
+0

फिर यह इसे फेंक देता है। हालांकि, यदि ओपी सही है और केवल 3 मान हैं, तो यह काम करता है। – piRSquared

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