본문 바로가기

파이썬(Python)/간단한 연습

엑셀 문서의 셀 값이 리스트일 때, 리스트 그대로 파이썬 판다스로 추출하는 방법

Python의 pandas 라이브러리 중, read_excel 을 써서 파일을 불렀는데, 내부의 데이터인 셀 값이 list 형식이면 이것이 각 문자로 나뉘어 str로 저장된다.

 

예를들어 엑셀문서의 특정 열(왼쪽 예제)를 read_excel을 써서 부른다.

 

pd_xls_ex = pd.read_excel(file_xls_ex)

selected_row_ex = pd_xls_ex['실험용']

 

 

원하는 결과는 대략 다음와 같다.

<class 'pandas.core.series.Series>

0 ['a','c','e']

1 [1,3,5]

2 [ (1, 2), (3,4) ]

 

그러나 실제로 돌려본 결과는, 이 아래처럼 나온다.

'[','a',',','c',',','e',']'

'[','1',',','3',',','5',']'

'[',' ','(','1',',',' ','2',')',',',' ','(','3',',','4',')',' ',']'

 

각 글자가 str으로 저장된 리스트가 반환된다.

리스트로 써먹기 위해서는 str을 재조립하는 코드를 짤 수도 있으나, 번거로우며 초보자가 쓰기엔 불편/불가능하다.

 

이 때, ast 라이브러리의 lteral_eval 클래스를 사용하면 편리하다.

 

아래와 같이 예문에 적용한다. 한글로 된 부분은 고쳐쓴다.

 

file_xls = 엑셀파일명_주소

pd_xls = pd.read_excel(file_xls)

row_as_list = pd_xls['실험용'].apply(ast.literal_eval)

 

이러면 특정 열의 각 행이 정확히 리스트로 나온다. 이제 이 열 데이터를 편리하게 작업할 수 있다.

나는 보통 리스트 안에 집어넣어 사용하므로, 아래의 코드 한줄을 더 쓴다.

lists_in_list = list(row_as_list)

 

예제의 결과는

lists_in_list =

[

    ['a','c','e'],

    [1,3,5],

    [ (1, 2), (3,4) ]

]

 

속성을 확인해보면 아래와 같다.

type(list_with_list) >=> list

type(list_with_list[0]) >=> list

type(list_with_list[2][0]) >=> tuple

 

 

참고했던 자료들은 2개다.

 

https://stackoverflow.com/questions/56811774/importing-an-excel-column-of-lists-with-pandas

 

Importing an excel column of lists with pandas

I have an excel file with a column that contains lists (see image). What is the correct way to use pandas.read_excel() in order to import the column? I ultimately need to be able create a datafram...

stackoverflow.com

 

https://stackoverflow.com/questions/52232742/how-to-use-ast-literal-eval-in-a-pandas-dataframe-and-handle-exceptions

 

How to use ast.literal_eval in a pandas dataframe and handle exceptions

I have a dataframe with a column containing a tuple data as a string. Eg. '(5,6)'. I need to convert this to a tuple structure. One way of doing it is using the ast.literal_eval(). I am using it in...

stackoverflow.com