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를 이용해서 만들어본 코드. 코드는 정말 생각보다 시간날 때, 짜보고 테스트 해보는게 장땡이라고 생각이 든다.

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

반응형

 I've frequently used the account, customer level data. Sometimes there's an requests to make the application table into customer level data. In this case, we can use the python group by but I should the account level data with priority. For example, customers may apply multiple Credit Card and I should tag the account like '1st', '2nd', '3rd'.

 In SAS, Impala's world, it's not so difficult make this but there's no function in python.

 

 I've already searched the similar function in Python but couldn't find the solution. Thus I've made the simple code to generate the order like below.

If you find the proper solution except the above code, please leave a message.

반응형

 다른 방법들도 몇 개 있었는데, User Warning이 나서 아래와 같은 방법을 써야 한다.

 

df = df.rename(columns=str.lower)

df.head()

반응형

 파이썬으로 데이터를 핸들링하면서 가장 고민했던 부분을 해결해 주었던 정말 아름다운 글이다.

이렇게 되는 것을 몰라서 한참을 고민했는데 실제 이 정도만 되어도 왠만한 자료들은 Pandas로만으로도 충분히 만들 수 있다. 물론 중간에 코드를 결합하거나 하는 복잡한 것을 한 방에 처리해주는 SQL은 안되지만 말이지. 어찌 되었거나 SQL을 못쓴다고 해도 이런 대체물이 있으니까 다행이라고 해야 할까?

 R dplyr 배우기 싫어서 sqldf로 모두 떡칠해서 썼던 것이 얼마전인데, 참 사람 일은 모를 일이다.

 

 

https://keytodatascience.com/groupby-pandas-python

반응형

+ Recent posts