파이썬 연산자들을 루프 돌고 싶을 때

조회수 282회

pandas 컬럼들 사이 관계를 탐색하고 있습니다.
두 컬럼 씩 뽑아서, 타겟 컬럼이 어떤 두 컬럼 간의 어떤 연산으로 나오는 것인지를 탐색하고자 합니다.

# 이 코드는 python에 기반한 pseudo 코드 입니다. 실행되지 않습니다. 
for i, j in combinations(df.columns, r=2): # itertools의 combinations 
    for operator in [+, -, *, /]: # 문제의 핵심 라인
        val_tmp = operator(df[i], df[j])
        if RMSE( df.target - val_tmp ) <0.01:
            print(i, operator, j)

목적은 간단하지만, 저 오퍼레이터들을 루프 하는 부분을 어떻게 처리해야 하는지 모르겠습니다.

If else 를 떡칠해서 더럽게 처리하는 것 말고, 스마트한 방법이 있을 것 같습니다.

  • 딱 4개 경우에 대한 체크이고 연산자를 받아 evaluate하는 경우라면.. 이런 경우의 if else는 착한 떡칠로 인정해줄 걸요. 연산자가 점점 많아질 예정이라거나 사용자가 연산자 목록을 정의할 수 있다거나 그런 건가요? 엽토군 2022.5.26 10:47
  • 그렇지 않습니다. 사실 스마트한 코드를 짜고 싶다는 제 집착이 더 큰 이유이긴 합니다. 부끄럽네요;;;; Laser-Cho 2022.5.26 10:49
  • 일단 원하시는 것은 eval() 함수로 실현하실 수 있습니다. https://blockdmask.tistory.com/437 하지만 저라면 보안상 이유로 안쓸거 같습니다. (오른쪽 컬럼에 괴상한 파이썬 구문을 집어넣으면 방어가 안됨) 엽토군 2022.5.26 10:50
  • for operator in [pd.Series.__add__, pd.Series.__mul__, pd.Series.__sub__] 로 eval 없이 처리가 가능하긴 한데..... 이게 더 스마트 한지는 모르겠네용 ㅋ 나누기는 어디갔지? ㅋㅋ Laser-Cho 2022.5.26 11:10

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)