본문으로 바로가기


csv읽어오기

df = pd.read_csv("/com/array/data.csv")


excel로 저장 하기

writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html


string -> date time으로 필드 바꾸기

df['updated_at'] = pd.to_datetime(df['updated_at'], format="%Y/%m/%d")


int형인 phone_number0, phone_number2 를 str형태로 바꾸기

df = pd.read_json("./user_info.json", 
dtype={'phone_number0':'str', 'phone_number2':'str'})

010 3588 등 핸드폰번호를 이렇게 따로 컬럼으로 나누어서 저장 한 경우 pandas 디폴트로 불러오면 010은 10 등으로 짤리고 0358은 앞에 0이 짤린 358로 불러와진다. str을 int로 convert하기 때문이다. 그래서 type을 지정 해주면 str로 받아오기 때문에 전화번호 등이 짤리지 않는다.


조건으로 필터링 하기

df1103 = df[(df['updated_at'] >= '2018-11-03') & (df['updated_at'] < '2018-11-04')]


날짜로 변경한 후 필터링 하기

import pandas as pd

df = pd.read_csv("./tsv.csv")
df['created_at'] = pd.to_datetime(df['created_at'])
dfDay1 = df[(df['created_at'] > '2018-11-22') & (df['created_at'] < '2018-11-23')]
print(dfDay1['created_at'].astype)

결과

11   2018-11-22 12:25:55.415

12   2018-11-22 12:42:03.450

13   2018-11-22 15:37:42.989

14   2018-11-22 23:19:07.470

Name: created_at, dtype: datetime64[ns]>

created_at필드를 날짜로 변경한 후 2018-11-22일 보다 크고 2018-11-23보다 작은 데이터 추출


created_at, user_id 두가지 컬럼 출력하기

print(dfDay1[['created_at', 'user_id']])

결과

created_at                           user_id

0  2018-11-22 09:08:01.781  id1

1  2018-11-22 09:24:37.782  id2

2  2018-11-22 09:24:49.625  id3


정렬하기

df2 = df[['postdate', 'title', 'bloggername', 'link']]
df2Sorted = df2.sort_values(['postdate'], ascending=[0])
print(df2Sorted)

필드가 0 한개만 있을 때 내림차순

df = df.sort_values(by=[0], ascending=True)


user_id, amount, direction필드 추출해서 direction이 HELLO, WORLD인 것 각각 분리하기

dfc = df[['user_id', 'amount', 'direction']]

print(dfc)

df_hello = dfc[(df['direction'] == 'HELLO')]
df_world = dfc[(df['direction'] == 'WORLD')]


특정 필드만 copy하기

dfBuy = df[['updated_at','buy_user_id', 'amount']].copy()


hello라는 이름의 컬럼 추가하기

df['hello'] = ""


df.columns

Index(['abstract', 'authors', 'institutions', 'journal', 'keywords', 'title'], dtype='object')

df.columns

Index(['abstract', 'authors', 'institutions', 'journal', 'keywords', 'title','hello'],


journal에서 숫자로된 4글자 매칭된 것 중 맨 앞에 선택 하기

pattern = re.compile("[0-9]{4}")
df['year'] = df.apply( lambda row: pattern.findall(row['journal'])[0], axis=1)


필드 이름 바꾸기

dfBuy= dfBuy.rename(columns={"buy_user_id": "user_id"})


그룹으로 묶어서 sum하기

dfBuy.groupby(['user_id']).sum()


숫자 형식 3자리마다 컴마 소수점 2째자리로 나오게 하기

ex) 9,706,137.47

print(dfGroup['amount'].map('{:,.2f}'.format))


csv로 저장하기

'amount', 'buy_user_id', 'updated_at' 3개의 필드만 뽑아서 updated_at <= '2018-11-06' 인 데이터를 뽑아서 저장하기

dfTarget = df[['amount', 'buy_user_id', 'updated_at']].copy()
dfTarget = dfTarget[dfTarget.updated_at <= "2018-11-06"]
dfTarget.to_csv('target.csv', index=False)


group by하기

dfGroup = dfTarget.groupby('buy_user_id').sum()

end




댓글을 달아 주세요