Python dataframe의 경우, SQL과는 달리 인덱스와 시리즈라는 것이 존재한다. 그래서 특정 조건을 걸어서 스트링을 잘라내는 것은 가능하나 그것을 날짜로 변환하는 것은 별도의 문제가 된다.

 

for col in dt_list:

    if col != 'PROC_YYMM':

        temp[col + '_MCN'] = 99999999

        for i in temp[temp[col] != '17010101'].index:

            print(col, pd.to_datetime(temp.at[i, col], format='%Y%m%d').year)

            temp.at[i, col + '_MCN'] = pd.to_datetime(temp.at[i, col], format='%Y%m%d').year

 

 

https://kongdols-room.tistory.com/117

 

패스트 인덱싱(.at, .iat)-pandas(15)

파이썬 버전 3.7 기준 pandas 버전 0.25.1 기준  패스트 인덱싱(at, iat) 본 포스팅에서는 .at 및 .iat 메서드를 다루도록한다.  .at 및 .iat 메서드 대괄호[ ]를 사용한 인덱싱은 많은 입력을 받을 수 있다.

kongdols-room.tistory.com

 

 

반응형

 메모리 dd1 ~ dd10이라는 객체가 있다고 가정하고 이 객체들을 모두 삭제해야 한다고 하면, loop로 돌리는 것이 가장 간단할 것으로 생각된다. SAS의 경우야 쉽게 매크로를 만들면 되니까.

 

for i in ragnge(1, 11):

    print(i) # loop 체크 용도

    del globals()['del{0}'.format(i)]

 

이렇게 하면 간단하게 객체들을 삭제할 수 있다. 파이썬에서 동적으로 변수를 생성할 수 있는 방법을 알 수 있다면, 참 편리하게 많은 일을 할 수 있다. 

 

 동적 변수 생성을 위한 좋은 글이 있어서 링크를 걸어본다.

 

https://congcoding.tistory.com/55

 

파이썬 동적으로 변수 생성하기 (for문으로 변수 생성, locals(), globals())

1. locals()함수와 globals()함수 파이썬에서 동적으로 변수를 생성하려면 locals()함수나 globals()함수를 사용해야 합니다. locals()함수는 현재 local변수들을 딕셔너리형태로 return합니다. globals()함수는..

congcoding.tistory.com

 

 

반응형

 

 

1. 차트 시각화

https://wikidocs.net/92087

2. 자료 : proc transpoe

 https://stackoverflow.com/questions/45596576/python-pandas-proc-transpose-equivalent

 

Python Pandas Proc Transpose Equivalent

I have a sas proc transpose i'm trying to replicate in pandas. Here is an example: ID = ['ID1', 'ID1', 'ID1', 'ID1', 'ID1'] obs_week = [201701,201701,201701,201701,201701] weeks_id = [1,2,3,4,5] ...

stackoverflow.com

 

3. Seaborn - SNS

https://seaborn.pydata.org/generated/seaborn.lineplot.html

 

seaborn.lineplot — seaborn 0.11.2 documentation

How to draw the legend. If “brief”, numeric hue and size variables will be represented with a sample of evenly spaced values. If “full”, every group will get an entry in the legend. If “auto”, choose between brief or full representation based o

seaborn.pydata.org

 

 

4. seaborn : size 조정

 

https://chunggaeguri.tistory.com/entry/Data-Analysis-seaborn-figure-%EC%82%AC%EC%9D%B4%EC%A6%88-%EC%A1%B0%EC%A0%88%ED%95%98%EB%8A%94-%EB%B2%95

 

 

반응형

filename='C:/Users/haesaekju/OneDrive/Documents/PyData/P00000001-ALL.csv'
chunksize=2 * 10 ** 5
for cnt, chunk in enumerate(pd.read_csv(filename, chunksize=chunksize)):
    #preprocessing(chunk)
    chunk.to_csv('str_' + str(cnt) + '.csv', header=['cmte_id','cand_id','cand_nm','contbr_nm','contbr_city','contbr_st','contbr_zip','contbr_employer','contbr_occupation','contb_receipt_amt','contb_receipt_dt','receipt_desc','memo_cd','memo_text','form_tp','file_num'])
    if cnt >= 10:
        break

 

 

반응형

 Python을 갖고 보고서 작성하고 그러면서 가장 고민했던 것이 바로 밑에 것. SAS보다는 Impala/Hive에서 많이 사용했던 row_number over (partition by order by) 기능을 Python에서 해보려고 고민하다가 아래 기능을 봤다. 최근에는 팀원들 불만 때문에 회사에서는 SAS -> Python Pandas 변환을 멈췄더니, 판다스 기능도 가끔씩 까먹고는 한다. 예전과는 달리 업무로 인해서 코딩을 하지 않는 경우에는 익히는 것도 빠르지만 까먹는 것도 아주 빠르다.

 

 그래도 파이썬이 많이 익숙해져서 다행이라고 생각해야지.

https://stackoverflow.com/questions/17775935/sql-like-window-functions-in-pandas-row-numbering-in-python-pandas-dataframe

반응형

 python pandas를 몇 개월 사용하면서 느끼는 점은 SAS에 비해서 문서화가 아주 잘 되어 있고 pandas 사이트에 가보면 정말 잘 정리된 설명서가 있다. 내가 파이썬을 오래 쓰지는 않았지만 최근에 SAS를 Python으로 변환하는 작업을 해보면서 data handling을 정말 극한까지 하는 것을 배우고 있다. 기존에 R을 이렇게 했더라면 정말 대학원에서 날고 기지 않았을까 생각을 할 정도로 열심히 하고 있다. 이게 다 회사가 갑자기 망해서 이직을 준비하면서 속도를 내게 된 것이다.

 

 Python dataframe에서는 개별 코드에서 컬럼을 변경하거나 생성하는 것을 가급적 추천하지 않는다. 그래서 많이 쓰이는 것이 바로 pandas.assign이다. 이거를 쓰면서 코드가 SAS datastep과 많이 비슷해졌는데, 한가지 문제가 생겼다. 바로 윗줄에서 만들었던 컬럼을 다음 다른 컬럼을 만들면서 사용하지 못한다는 것이다. SAS에서는 원래 잘 되었고 sql에서는 calculated라는 것이 있지만 pandas에서는 찾기가 쉽지 않았다. 아니, 사실 영어만 좀 하고 차분히 글을 읽어보면 python pandas assign() 설명문 맨 마지막줄에 있는 내용을 금방 이해했을 것이다. 

 

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html

 

pandas.DataFrame.assign — pandas 1.2.5 documentation

The column names are keywords. If the values are callable, they are computed on the DataFrame and assigned to the new columns. The callable must not change input DataFrame (though pandas doesn’t check it). If the values are not callable, (e.g. a Series,

pandas.pydata.org

 오늘 오후에 내 피같은 시간 30분을 날리면서 고민했던 것인데, 설명문에 아주 친절하게 lambda로 해결하면 된다고 나왔는데 제대로 보지 않았던 것이다. 정말 파이썬의 경우 영어를 잘 하면 설명문을 보면서 정말 많은 도움이 될 수 있을 것이라고 생각된다. 아래는 pandas.assign()안에서 이전에 정의했던 컬럼을 다음 컬럼 만들때 참조해서 만드는 것이다. 오늘 오후에 이거를 몰라서 기존에 짜던 코드를 다시 3개로 쪼개는 삽질을 했다. 현재 변환하는 코드가 상당히 많은데 날 잡아서 예전에 짜놨던 초창기 코드를 좀 가다듬어야할 필요성이 있다. 아래는 lambda를 이용해서 만들어본 코드. 코드는 정말 생각보다 시간날 때, 짜보고 테스트 해보는게 장땡이라고 생각이 든다.

 사실 오늘 오후에는 이제 왠만한 것들은 다 할줄 안다고 생각했는데, 이제 보니까 이런 기본적인 것도 할줄 몰랐다는 생각이 드니까 좀 많이 창피하더라.

반응형

'Python, PySpark' 카테고리의 다른 글

Python : CSV 쪼개기  (0) 2021.09.08
SAS retain equivalent in Python  (0) 2021.08.22
Pseudo SAS Retain in Python  (0) 2021.06.18
Python Pandas column name 일괄 변경  (0) 2021.06.07
Python Pandas SQL like function  (0) 2021.06.02

+ Recent posts