2014-04-18 4 views
7

मैं पांडस में डेटाटाइप "ऑब्जेक्ट" के साथ थोड़ा उलझन में हूं। वास्तव में "ऑब्जेक्ट" क्या है?पांडस में फ्लोट टू स्ट्रिंग कनवर्ट करें

मैं ऑब्जेक्ट से स्ट्रिंग तक परिवर्तनीय "एसपीटी" (नीचे देखें) को बदलना चाहता हूं।

> df_cleaned.dtypes 
    Vmag  float64 
    RA   float64 
    DE   float64 
    Plx   float64 
    pmRA  float64 
    pmDE  float64 
    B-V   float64 
    SpT   object 
    M_V   float64 
    distance float64 
    dtype: object 

इसके लिए मैं निम्नलिखित है:

df_cleaned['SpT'] = df_cleaned['SpT'].astype(str) 

लेकिन उस SPT की dtype पर कोई प्रभाव नहीं है।

करने के लिए कारण नहीं है जब मैं निम्न कार्य करें:

f = lambda s: (len(s) >= 2) and (s[0].isalpha()) and (s[1].isdigit()) 
i = df_cleaned['SpT'].apply(f) 
df_cleaned = df_cleaned[i] 

मैं:

TypeError: object of type 'float' has no len() 

इसलिए, मेरा मानना ​​है कि अगर मैं "वस्तु" कन्वर्ट करने के लिए "स्ट्रिंग", मैं मिल जाएगा जो मैं चाहता हूं उसे करने के लिए।

और जानकारी: यह कैसे SPT लग रहा है की तरह है: एक स्तंभ स्ट्रिंग या स्ट्रिंग के रूप में व्यवहार किया जाता है

HIP 
1    F5 
2    K3V 
3    B9 
4    F0V 
5    G8III 
6    M0V: 
7    G0 
8  M6e-M8.5e Tc 
9    G5 
10    F6V 
11    A2 
12   K4III 
13   K0III 
14    K0 
15    K2 
... 
118307 M2III: 
118308  K: 
118309  A2 
118310  K5 
118312  G5 
118313  F0 
118314  K0 
118315  K0III 
118316  F2 
118317  F8 
118318  K2 
118319  G2V 
118320  K0 
118321  G5V 
118322  B9IV 
Name: SpT, Length: 114472, dtype: object 
+0

'dtype' गैर अभिन्न प्रकारों के लिए एक सामान्य संख्यात्मक प्रकार है, यह सुझाव देता है कि आपका कॉलम पहले से ही एक स्ट्रिंग है और निश्चित रूप से रूपांतरण के बाद है इसलिए समस्या आपके फ़ंक्शन – EdChum

+0

नोप के साथ है , समारोह सही है। नीचे दिए गए जवाब ने मेरी मदद की। फिर भी धन्यवाद! – Rohit

+0

@aging_gorrila आप पांडा का किस संस्करण का उपयोग कर रहे हैं? –

उत्तर

11

है, यह object के dtype होगा (लेकिन जरूरी नहीं सच पिछड़े - नीचे और अधिक) ।

import pandas as pd 
df = pd.DataFrame({'SpT': ['string1', 'string2', 'string3'], 
        'num': ['0.1', '0.2', '0.3'], 
        'strange': ['0.1', '0.2', 0.3]}) 
print df.dtypes 
#SpT  object 
#num  object 
#strange object 
#dtype: object 

एक स्तंभ केवल तार होते हैं, तो हम उस पर len आप ठीक से काम करना चाहिए किया जो की तरह लागू कर सकते हैं:

print df['num'].apply(lambda x: len(x)) 
#0 3 
#1 3 
#2 3 

हालांकि, वस्तु का एक dtype नहीं है का मतलब है यहाँ एक सरल उदाहरण है इसमें केवल तार होते हैं। उदाहरण के लिए, कॉलम strange में मिश्रित प्रकार वाली वस्तुओं और कुछ str और float शामिल हैं। समारोह len लागू करना कि तुम क्या देखा है के लिए एक त्रुटि समान बढ़ा देंगे:

print df['strange'].apply(lambda x: len(x)) 
# TypeError: object of type 'float' has no len() 

इस प्रकार, समस्या हो सकती है कि आप ठीक ढंग से स्ट्रिंग के लिए स्तंभ परिवर्तित नहीं किया, और स्तंभ अभी भी मिश्रित वस्तु प्रकार होते हैं।

df['strange'] = df['strange'].astype(str) 
print df['strange'].apply(lambda x: len(x)) 
#0 3 
#1 3 
#2 3 

(df_cleaned और अपने प्रश्न में वहाँ df_clean के बीच एक संदिग्ध विसंगति नहीं है, यह मुद्रण की गलती या गलती है:

ऊपर के उदाहरण को जारी रखते हुए हमें तार करने के लिए strange कन्वर्ट और देखें कि क्या apply काम करता है कोड में समस्या का कारण बनता है?)

+0

इसे स्पष्ट करने के लिए धन्यवाद। मुद्दा यह है कि रूपांतरण कमांड "df_cleaned ['spT'] = df_cleaned ['spT']। Astype (str)" का कोई प्रभाव नहीं है। मुझे एक ही त्रुटि मिलती है। मैं कैसे सुनिश्चित करूं कि सभी 114000 मानों को स्ट्रिंग में परिवर्तित कर दिया गया है? हाँ, एक टाइपो है। मैंने इसे सही किया। – Rohit

+0

मेरा मानना ​​है कि 'df_cleaned ['spT'] = df_cleaned ['spT']। Astype (str)' 'सही ढंग से रूपांतरण किया होगा। क्या आप अपने प्रश्न में वर्णित सटीक कार्य को लागू कर रहे हैं? –

+0

दुह! मुझे गंभीर परिवर्तनीय नाम चुनने की गंभीरता से आवश्यकता है! ये खुद को भ्रमित भी करते हैं! हाँ, मैं एक गलत चर के लिए आवेदन कर रहा था! धन्यवाद ... मुझे कॉफी चाहिए! – Rohit

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