2017-01-09 12 views
11
df 
    A  B 
0 a=10 b=20.10 
1 a=20 NaN 
2 NaN b=30.10 
3 a=40 b=40.10 

एक dataframe में मौजूद है जब मैं करने की कोशिश की:त्रुटि astype का उपयोग कर NaN

df['A'] = df['A'].str.extract('(\d+)').astype(int) 
df['B'] = df['B'].str.extract('(\d+)').astype(float) 

लेकिन मैं निम्नलिखित त्रुटि मिलती है:

ValueError: cannot convert float NaN to integer

और:

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

कैसे कर मैं इसे ठीक करता हूँ?

+1

सबसे पहले 'NaN' केवल नाव द्वारा दर्शाया जा सकता है ताकि आप उस मामले में' int' पर कास्ट नहीं कर सकते हैं, दूसरा अगर आप उदाहरण स्ट्रिंग और कुछ के लिए मिश्रित dtypes है दूसरी बात तो '' str.extract' का उपयोग कर विफल हो जाएगी, हालांकि मिश्रित dtypes समर्थित हैं, यह एक अच्छा विचार नहीं है क्योंकि यह त्रुटियों की ओर जाता है। आपको यह तय करना चाहिए कि अंतिम प्रकार क्या होना चाहिए और गुम मानों को प्रतिस्थापित करना चाहिए जो आपको – EdChum

उत्तर

10

यदि कॉलम में कुछ मान गुम हैं (NaN) और फिर संख्यात्मक रूपांतरित हो जाते हैं, तो हमेशा dtypefloat है। आप मूल्यों को int में परिवर्तित नहीं कर सकते हैं। केवल float पर, typeNaNfloat है।

print (type(np.nan)) 
<class 'float'> 

docs देखें कैसे मान कम से कम अगर एक NaN कन्वर्ट: जरूरत पूर्णांक को महत्व देता है आप कुछ int, उदा को NaN की जगह की जरूरत है

integer > cast to float64

हैं 0fillna द्वारा और फिर इसे पूरी तरह से काम करता है:

df['A'] = df['A'].str.extract('(\d+)', expand=False) 
df['B'] = df['B'].str.extract('(\d+)', expand=False) 
print (df) 
    A B 
0 10 20 
1 20 NaN 
2 NaN 30 
3 40 40 

df1 = df.fillna(0).astype(int) 
print (df1) 
    A B 
0 10 20 
1 20 0 
2 0 30 
3 40 40 

print (df1.dtypes) 
A int32 
B int32 
dtype: object 
+0

कार्यों को समझ में आता है। आपकी सहायता के लिए धन्यवाद। – Sun

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