2016-12-02 6 views
5

मेरे पास वास्तव में सरल Pandasdataframe है जहां प्रत्येक कक्ष में एक सूची होती है। मैं सूची के प्रत्येक तत्व को अपने स्वयं के कॉलम में विभाजित करना चाहता हूं। मैं मानों को निर्यात करके और फिर नया dataframe बनाकर ऐसा कर सकता हूं। यह विशेष रूप से ऐसा करने का एक अच्छा तरीका प्रतीत नहीं होता है, अगर मेरे dataframe में सूची कॉलम से अलग कॉलम था।एकाधिक कॉलम में एक पांडस सेल में एक सूची को विभाजित करना

import pandas as pd 

df = pd.DataFrame(data=[[[8,10,12]], 
         [[7,9,11]]]) 

df = pd.DataFrame(data=[x[0] for x in df.values]) 

वांछित उत्पादन:

0 1 2 
0 8 10 12 
1 7 9 11 

फ़ॉलो-अप @Psidom उत्तर के आधार पर:

अगर मैं एक दूसरे स्तंभ था:

df = pd.DataFrame(data=[[[8,10,12], 'A'], 
         [[7,9,11], 'B']]) 

मैं कैसे ढीला नहीं है दूसरा कॉलम?

वांछित उत्पादन:

0 1 2 3 
0 8 10 12 A 
1 7 9 11 B 
+2

'df [0] .apply (pd.Series) 'आपके उदाहरण के लिए काम करता है। – Psidom

+0

@Psidom सही! उत्तर के रूप में सबमिट क्यों न करें। – user2242044

उत्तर

7

आप कर सकते हैं apply() समारोह के साथ श्रृंखला के माध्यम से लूप और एक Series करने के लिए प्रत्येक सूची कनवर्ट करते हैं, यह स्वचालित रूप से स्तंभ दिशा में एक श्रृंखला के रूप में सूची का विस्तार:

df[0].apply(pd.Series) 

# 0 1 2 
#0 8 10 12 
#1 7 9 11 

अद्यतन: डेटा फ्रेम के अन्य कॉलम रखने के लिए, आप परिणामों को उन कॉलम के साथ जोड़ सकते हैं जिन्हें आप रखना चाहते हैं:

pd.concat([df[0].apply(pd.Series), df[1]], axis = 1) 

# 0 1 2 1 
#0 8 10 12 A 
#1 7 9 11 B 
+0

मैं अतिरिक्त कॉलम (संशोधित मूल प्रश्न) कैसे खोला नहीं सकता? – user2242044

+0

आपको 'pd.concat()' विधि की आवश्यकता है। अद्यतन देखें! – Psidom

1

आप pd.DataFrame(df[col].values.tolist()) कर सकता है - बहुत तेजी से है ~ 500x

In [820]: pd.DataFrame(df[0].values.tolist()) 
Out[820]: 
    0 1 2 
0 8 10 12 
1 7 9 11 

In [821]: pd.concat([pd.DataFrame(df[0].values.tolist()), df[1]], axis=1) 
Out[821]: 
    0 1 2 1 
0 8 10 12 A 
1 7 9 11 B 

समय

मध्यम

In [828]: df.shape 
Out[828]: (20000, 2) 

In [829]: %timeit pd.DataFrame(df[0].values.tolist()) 
100 loops, best of 3: 15 ms per loop 

In [830]: %timeit df[0].apply(pd.Series) 
1 loop, best of 3: 4.06 s per loop 

बड़े

In [832]: df.shape 
Out[832]: (200000, 2) 

In [833]: %timeit pd.DataFrame(df[0].values.tolist()) 
10 loops, best of 3: 161 ms per loop 

In [834]: %timeit df[0].apply(pd.Series) 
1 loop, best of 3: 40.9 s per loop 
संबंधित मुद्दे

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