2015-11-19 9 views
13

मैं पाइथन पांडा का उपयोग कर फ़ोल्डर में सभी सीएसवी फ़ाइलों को जोड़ना (विलय) करना चाहता हूं।पांडा डेटाफ्रेम जोड़ते समय कॉलम ऑर्डर क्यों बदल रहा है?

उदाहरण के लिए: कहो फ़ोल्डर दो csv फ़ाइलें test1.csv और test2.csv इस प्रकार है:

A_Id P_Id CN1   CN2   CN3 
AAA  111  702   709   740 
BBB  222  1727  1734  1778 

और

A_Id P_Id CN1   CN2   CN3 
CCC  333  710  750   750 
DDD  444  180  734   778 

तो अजगर स्क्रिप्ट मैंने लिखा इस प्रकार किया गया था के रूप में:

#!/usr/bin/python 
import pandas as pd 
import glob 

all_data = pd.DataFrame() 
for f in glob.glob("testfolder/*.csv"): 
    df = pd.read_csv(f) 
    all_data = all_data.append(df) 

all_data.to_csv('testfolder/combined.csv') 

हालांकि combined.csv में सभी के पास लगता है संलग्न पंक्तियाँ, यह इस प्रकार है:

 CN1  CN2   CN3 A_Id P_Id 
    0 710  750   750  CCC  333 
    1 180  734   778  DDD  444  
    0 702  709   740  AAA  111 
    1 1727  1734  1778 BBB  222 

कहाँ के रूप में यह इस तरह दिखना चाहिए:

A_ID P_Id CN1 CN2 CN2 
AAA 111 702 709 740 
BBB 222 1727 1734 1778 
CCC 333 110 356 123 
DDD 444 220 256 223 
  • क्यों पहले दो स्तंभों अंत करने के लिए ले जाया जाता है?
  • आखिरी पंक्ति के बजाय पहली पंक्ति में क्यों शामिल हो रहा है?

मुझे क्या याद आ रही है? और मैं पहले कॉलम में 0s और 1s कैसे प्राप्त कर सकता हूं?

पीएस: चूंकि ये बड़ी सीएसवी फाइलें हैं, इसलिए मैंने पांडा का उपयोग करने के बारे में सोचा।

+1

पांडा का कौन सा संस्करण उपयोग करता है? क्योंकि यह 0.17.0 अच्छी तरह से काम करता है। – jezrael

+1

मुझे लगता है कि समस्या सीएसवी के प्रारूप के साथ है - इसे जांचने के लिए पंक्ति 'df = pd.read_csv (f)' जोड़ें 'print df.head()' के बाद प्रयास करें। – jezrael

+1

और मुझे लगता है कि आप इनपुट 'glob.glob ("testfolder/*। Csv") के रूप में आउटपुट पढ़ते हैं:', क्योंकि आउटपुट इनपुट निर्देशिका में लिखा जाता है: 'all_data.to_csv ('testfolder/jointल्ट csv'), आपके पास है निर्देशिका को 'all_data.to_csv (' out/jointल्ट.एसवीवी ') में बदलने के लिए ' – jezrael

उत्तर

0

मैंने नीचे कोड को tweaked। ऑनलाइन टिप्पणियां।

#!/usr/bin/python 
import pandas as pd 
import glob 

# Grab all the csv files in the folder to a list. 
fileList = glob.glob('input_folder/*.csv') 

#Initialize an empty dataframe to grab the csv content. 
all_data = pd.DataFrame() 

#Initialize an empty list to grab the dataframes. 
dfList= [] 

for files in fileList: 
    df = pd.read_csv(files, index_col = None, header= False) 
    dfList.append(df) 

#The frames will be in reverse order i.e last read file's content in the begining. So reverse it again 
Reversed_dfList = dfList[::-1] 
CombinedFrame = pd.concat(Reversed_dfList) 

# The "Combined.csv" file will have combination of all the files. 
CombinedFrame.to_csv('output_folder/Combined.csv', index=False) 
7

इस प्रयास करें .....

all_data = all_data.append(df)[df.columns.tolist()] 
+3

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, इस सवाल का जवाब देने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करना और/या कैसे यह दीर्घकालिक मूल्य में सुधार करता है। कोड-केवल उत्तर निराश होते हैं। – Ajean

+3

तो क्या यह शायद एक पांडस बग है जिसे दायर करने की आवश्यकता है? मेरी भी यही समस्या थी। – user1761806

+1

सवाल @kingmakerking पूछ रहा था "क्यों"। उदाहरण के लिए 2 डेटाफ्रेम के अलग-अलग कॉलम होने पर यह मदद नहीं करेगा। मैं पीडी.कोनकैट के साथ भी एक ही समस्या देख सकता हूं – mm441

2

मैं एक ही मुद्दा था और यह painfull था। मैंने अंतिम डेटाफ्रेम में जोड़े जाने के बाद स्रोत डेटाफ्रेम के आधार पर स्तंभों को पुनर्गठित करके इसे हल करने में कामयाब रहे। यह इस तरह दिखेगा:

समाधान
#!/usr/bin/python 
import pandas as pd 
import glob 

all_data = pd.DataFrame() 
for f in glob.glob("testfolder/*.csv"): 
    df = pd.read_csv(f) 
    all_data = all_data.append(df) 
    all_data = all_data[df.columns] 

all_data.to_csv('testfolder/combined.csv') 

के बाद से आपकी समस्या पहले लगभग दो साल से था, मैं पोस्टिंग कर रहा हूँ जो किसी और enyone जो भी वही समस्या का सामना करना पड़ेगा के लिए मेरे लिए काम किया।

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