2016-12-02 4 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]) 

원하는 출력 :

나는 두 번째 열이 한 경우 :

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

이 어떻게에게 느슨한하지를 할 @Psidom의 답변에 따라

0 1 2 
0 8 10 12 
1 7 9 11 

후속 다른 컬럼?

원하는 출력 :

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

예를 들어'df [0] .apply (pd.Series)'가 작동합니다. – Psidom

+0

@Psidom perfect! 왜 대답으로 제출하지 마십시오. – 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())을 할 수는 - ~

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 

대형

중간

500 개 배

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 

타이밍

훨씬 빠릅니다

관련 문제