2016-05-06 5 views
9

पांडा की to_csv विधि कॉलम के क्रम को बनाए रखने नहीं है। यह सीएसवी में स्तंभों को वर्णानुक्रम से व्यवस्थित करने का विकल्प चुनता है। यह एक बग है और इसकी सूचना दी गई है और इसे संस्करण 0.11.0 में ठीक किया जाना चाहिए। मेरे पास 0.18.0 है।संरक्षण स्तंभ क्रम to_csv विधि

import pandas as pd 
df = pd.DataFrame({'V_pod_error' : [a], 
        'V_pod_used' : [b], 
        'U_sol_type' : [c] 
           ... 
           ... and so on upto 50 columns } 

pd.to_csv(df) 

एक्सेल आदेश:

0 V_pod_error  V_pod_used   U_sol type  ... 
1 

मैं कॉलम और नामों की एक बड़ी संख्या है:

0 U_sol type   V_pod_error  V_pod_used  ... 
1 

क्या मैं चाहता हूँ शब्दकोश में आदेश है। मैं इसे मैन्युअल रूप से नहीं कर सकता या कॉलम ऑर्डर लिख सकता हूं। 2013 here में एक ही सवाल रहा है। और ऐसा लगता है कि कोई अपडेट नहीं है! मैं समुदाय से मेरी मदद करने के लिए कहूंगा! यह वास्तव में समस्याग्रस्त है।

+0

जी हाँ, मुझे आदेशों के साथ एक पाश में डेटा फ्रेम का निर्माण कर रहा हूँ इस प्रकार मैं इसे हल किया। आदेशित आदेश की जांच करेगा। धन्यवाद। बात यह है कि जब मैं चीजों की ज़रूरत होती थी तब मुझे एक त्वरित और गंदे ढंग से अद्यतन करना जारी रखा जाता था। अब इसके साथ काम करने के लिए वास्तव में मुश्किल है। अंत में कॉलम जोड़ने के लिए मैं कॉलम नाम को 'z' (त्वरित और गंदे) के साथ उपसर्ग करता हूं। परिभाषित आउटपुट के रूप में वांछित पाने के लिए मेरे मौजूदा कोड में सरल जोड़ों के किसी भी अन्य सुझाव? –

उत्तर

6

निम्नलिखित समाधान आज़माएं। यहां तक ​​कि मुझे एक ही मुद्दे का सामना करना पड़ा।

import pandas as pd 
df = pd.DataFrame({'V_pod_error' : [a], 
        'V_pod_used' : [b], 
        'U_sol_type' : [c] 
           ... 
           ... and so on upto 50 columns } 

column_order = ['V_pod_error', 'V_pod_used', 'U_sol_type',.....# upto 50 column names] 

df_to_save[column_order].to_csv(df) 
8

मुझे लगता है कि समस्या, DataFrame निर्माता में है, क्योंकि आप स्तंभों की कस्टम आदेश के लिए पैरामीटर columns जोड़ने की जरूरत है। यदि आप पैरामीटर कॉलम सेट नहीं करते हैं, तो कॉलम को अल्फान्यूमेरिकल का ऑर्डर दिया जाता है।

import pandas as pd 
df = pd.DataFrame({'V_pod_error' : [0,2], 
        'V_pod_used' : [6,4], 
        'U_sol_type' : [7,8]}) 
print df 
    U_sol_type V_pod_error V_pod_used 
0   7   0   6 
1   8   2   4 

print df.to_csv() 
,U_sol_type,V_pod_error,V_pod_used 
0,7,0,6 
1,8,2,4 


df1 = pd.DataFrame({'V_pod_error' : [0,2], 
        'V_pod_used' : [6,4], 
        'U_sol_type' : [7,8]}, 
        columns=['V_pod_error','V_pod_used','U_sol_type']) 

print df1 
    V_pod_error V_pod_used U_sol_type 
0   0   6   7 
1   2   4   8 

print df1.to_csv() 
,V_pod_error,V_pod_used,U_sol_type 
0,0,6,7 
1,2,4,8 

संपादित करें:

एक अन्य समाधान सबसेट द्वारा स्तंभ का क्रम निर्धारित करने से पहले लिखने to_csv (धन्यवाद Mathias711):

import pandas as pd 
df = pd.DataFrame({'V_pod_error' : [0,2], 
        'V_pod_used' : [6,4], 
        'U_sol_type' : [7,8]}) 
print df 
    U_sol_type V_pod_error V_pod_used 
0   7   0   6 
1   8   2   4 

df = df[['V_pod_error','V_pod_used','U_sol_type']] 
print df 

    V_pod_error V_pod_used U_sol_type 
0   0   6   7 
1   2   4   8 

EDIT1: शायद पहली मदद OrderedDict करने के लिए dict कन्वर्ट और फिर DataFrame बनाने :

import collections 
import pandas as pd 


d = {'V_pod_error' : [0,2],'V_pod_used' : [6,4], 'U_sol_type' : [7,8]} 
print d 
{'V_pod_error': [0, 2], 'V_pod_used': [6, 4], 'U_sol_type': [7, 8]} 

print pd.DataFrame(d) 
    U_sol_type V_pod_error V_pod_used 
0   7   0   6 
1   8   2   4 

d1 = collections.OrderedDict(d) 
print d1 
OrderedDict([('V_pod_error', [0, 2]), ('V_pod_used', [6, 4]), ('U_sol_type', [7, 8])]) 

print pd.DataFrame(d1) 
    V_pod_error V_pod_used U_sol_type 
0   0   6   7 
1   2   4   8 
+0

क्या यह 'df.to_csv()' से पहले 'df = df [[कॉलम]]' को कॉल करने में भी मदद कर सकता है? आम तौर पर यह आपके कॉलम के क्रम को बदल देगा – Mathias711

+0

हां, यह एक और विकल्प है। धन्यवाद। मैं इसे जवाब देने के लिए जोड़ता हूँ। – jezrael

+0

@jexrael आपकी तत्काल प्रतिक्रिया के लिए धन्यवाद। लेकिन, मुझे यकीन नहीं है कि हम एक ही पृष्ठ पर हैं। मैं समझता हूं कि हमें इसे मैन्युअल रूप से करने की आवश्यकता है। लेकिन मैं स्तंभ संरचना को लिखकर इसे मैन्युअल रूप से नहीं करना चाहता क्योंकि मेरे पास बहुत सारे कॉलम हैं। मैं डेटाफ्रेम कॉलम संरचना को संरक्षित करना चाहता हूं। मैं चाहता हूं कि सीएसवी में किसी भी झगड़े के बिना डेटा फ्रेम में क्या दिखाना है। –

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