2017-03-10 11 views
6

मैं आईडी नंबर के साथ एक बड़े dataframe है:पांडा परिवर्तित int करने के लिए स्ट्रिंग

ID.head() 
Out[64]: 
0 4806105017087 
1 4806105017087 
2 4806105017087 
3 4901295030089 
4 4901295030089 

ये पल में सभी स्ट्रिंग्स हैं।

मैं छोरों का उपयोग किए बिना int को परिवर्तित करना चाहते हैं - इस के लिए मैं ID.astype(int) का उपयोग करें।

समस्या यह है कि मेरी कुछ पंक्तियों में गंदे डेटा होते हैं जिन्हें int में परिवर्तित नहीं किया जा सकता है, उदाहरण के लिए

ID[154382] 
Out[58]: 'CN414149' 

मैं कैसे (लूप का उपयोग किए बिना) ताकि मैं मन की शांति के साथ astype उपयोग कर सकते हैं घटनाओं की इन प्रकार के निकाल सकते हैं?

ID = pd.to_numeric(ID, errors='coerce') 

तो ID स्तंभ है:

+0

उपयोग '' 'pd.to_numeric NaN' को उन मूल्यों को परिवर्तित करने के लिए: 0 और फिर int लिए डाली:

df.ID = pd.to_numeric(df.ID, errors='coerce').fillna(0).astype(np.int64) 

नमूना , ध्यान दें कि यह 'फ्लोट' का एक प्रकार का उत्पादन करेगा, इस सवाल से पूछा गया है कि कई बार – EdChum

+0

बहुत बहुत धन्यवाद! आप केवल टिप्पणी क्यों कर रहे हैं; आपने इसका सही उत्तर दिया, और पहले! वैसे भी, धन्यवाद vm – gmarais

+0

क्योंकि अक्सर समस्या का विवरण अधूरा होता है, इसलिए यह एक उत्तर पोस्ट करने में समय बर्बाद कर देता है और फिर संपादित करने के लिए, अधिक जानकारी मांगना, फिर से संपादित करना आदि। यह सवाल सरल लग रहा था, इसलिए मांस से जवाब देने में तेज़ी से प्रतिक्रिया देना तेज है, इसके अलावा मैं एक डुप्ली – EdChum

उत्तर

17

आप पैरामीटर errors='coerce' जोड़ने to_numeric ढंग से काम करने की जरूरत है

df.ID = pd.to_numeric(df.ID, errors='coerce') 

लेकिन गैर संख्यात्मक NaN में बदल रही हैं, इसलिए सभी मूल्यों float हैं।

int के लिए NaN को कुछ मूल्यों में बदलने की आवश्यकता है उदा। (, Df [ 'आईडी'] त्रुटियों = 'मजबूर')

df = pd.DataFrame({'ID':['4806105017087','4806105017087','CN414149']}) 
print (df) 
       ID 
0 4806105017087 
1 4806105017087 
2  CN414149 

print (pd.to_numeric(df.ID, errors='coerce')) 
0 4.806105e+12 
1 4.806105e+12 
2    NaN 
Name: ID, dtype: float64 

df.ID = pd.to_numeric(df.ID, errors='coerce').fillna(0).astype(np.int64) 
print (df) 
       ID 
0 4806105017087 
1 4806105017087 
2    0 
संबंधित मुद्दे