2016-02-18 17 views
20

मैं एक स्तंभ है कि तरह लग रहा है के साथ एक पांडा dataFrame है में विभाजित सूची के स्तंभ निम्नलिखित:पांडा एकाधिक स्तंभों

` 
In [207]:df2.teams 
Out[207]: 
0   [SF, NYG] 
1   [SF, NYG] 
2   [SF, NYG] 
3   [SF, NYG] 
4   [SF, NYG] 
5   [SF, NYG] 
6   [SF, NYG] 
7   [SF, NYG] 
` 

मैं नामित 2 कॉलम TEAM1 और TEAM2 का उपयोग कर पांडा

में सूचियों के इस स्तंभ विभाजित करने की आवश्यकता

उत्तर

39

आप tolist साथ values द्वारा numpy array को परिवर्तित करके lists बनाया साथ DataFrame निर्माता का उपयोग कर सकते हैं:

import pandas as pd 

d1 = {'teams': [['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'], 
       ['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG']]} 
df2 = pd.DataFrame(d1) 
print (df2) 
     teams 
0 [SF, NYG] 
1 [SF, NYG] 
2 [SF, NYG] 
3 [SF, NYG] 
4 [SF, NYG] 
5 [SF, NYG] 
6 [SF, NYG] 

df2[['team1','team2']] = pd.DataFrame(df2.teams.values.tolist(), index= df2.index) 
print (df2) 
     teams team1 team2 
0 [SF, NYG] SF NYG 
1 [SF, NYG] SF NYG 
2 [SF, NYG] SF NYG 
3 [SF, NYG] SF NYG 
4 [SF, NYG] SF NYG 
5 [SF, NYG] SF NYG 
6 [SF, NYG] SF NYG 

और नई DataFrame के लिए:

df3 = pd.DataFrame(df2['teams'].values.tolist(), columns=['team1','team2']) 
print (df3) 
    team1 team2 
0 SF NYG 
1 SF NYG 
2 SF NYG 
3 SF NYG 
4 SF NYG 
5 SF NYG 
6 SF NYG 

apply(pd.Series) साथ समाधान बहुत धीमी है:

#7k rows 
df2 = pd.concat([df2]*1000).reset_index(drop=True) 

In [89]: %timeit df2['teams'].apply(pd.Series) 
1 loop, best of 3: 1.15 s per loop 

In [90]: %timeit pd.DataFrame(df2['teams'].values.tolist(), columns=['team1','team2']) 
1000 loops, best of 3: 820 µs per loop 
+0

कॉलम नाम में "टीम 1" जैसी जगह के बारे में क्या है। मैंने कॉलम वैल्यू को इस तरह से एक्सेस करने का प्रयास किया ** डीएफ 2 ['टीम 1'] ** लेकिन यह काम नहीं करता है। – Sherlock

+0

मुझे लगता है कि यह भी अच्छा काम करता है। – jezrael

+0

माइनर कैविट, यदि आप इसे मौजूदा डेटाफ्रेम पर उपयोग कर रहे हैं, तो इंडेक्स रीसेट करना सुनिश्चित करें, अन्यथा यह सही तरीके से असाइन नहीं करेगा। – user1700890

2

वहाँ एक वाक्य रचना सरल तरीके से हो रहा है, और इसलिए याद रखना अधिक आसान प्रस्तावित समाधानों के विरोध में। मुझे लगता है कि कॉलम को डेटाफ्रेम डीएफ में 'मेटा' कहा जाता है:

df2 = pd.DataFrame(df['meta'].str.split().values.tolist()) 
+0

मुझे एक त्रुटि मिली लेकिन मैंने इसे 'str.split() 'को हटाकर हल किया। यह बहुत आसान था और यदि आप अपनी सूची में वस्तुओं की संख्या नहीं जानते हैं तो इसका लाभ है। – otteheng

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