-
pandas dataframe 정리DataAnalysis/개념정리 2022. 4. 24. 22:25
정적웹크롤링
import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt import matplotlib result = [] #쿠우쿠우 for pageNum in range(1,8): url = f'http://www.qooqoo.co.kr/bbs/board.php?bo_table=storeship&&page={pageNum}' response = requests.get(url) print('-------------------------- " ', pageNum) if response.status_code == 200: html = response.content soup = BeautifulSoup(html, 'html.parser',from_encoding='cp949') tbody = soup.find('tbody') tr_list=tbody.find_all('tr') for i in range(0,len(tr_list),2): tr=tr_list[i] loc = tr.find('span', class_="color-grey").text # 지역 name = tr.find('div', class_="td-subject ellipsis").find_all('a')[1].text # 지점명 tel = tr.find('td', class_="hidden-xs").find('a').text # 주소 addr = tr.find('td', class_="hidden-xs td-width").find('a').text # 번호 result.append([loc, name, addr, tel]) print(loc, name, addr, tel) else : print(response.status_code) pr = pd.DataFrame(result, columns=['loc', 'name', 'addr', 'tel'])
1. 문자열 치환 변경
pr['loc']=pr['loc'].str.replace('[','')
2. 지역별 데이터 뽑기, groupby 함수, value_counts() 사용
a=pr['loc'].value_counts()
b=pr.groupby('loc') b.describe()
3. 경기도 열 삭제
a.drop(['경기도'],inplace=True)
4. 정렬
a.sort_values(ascending=True,inplace=True)
5. 포함된 문자열 찾기
a[a.index.str.contains('세종')]
condition = sample['name'].isin(['kim', 'lee'])
sample.loc[condition]
6. column 이름 바꾸기 rename
df.columns = ['a', 'b']
pandas 예제
import numpy as np import matplotlib.pyplot as plt from matplotlib import rc import matplotlib rc('font', family='AppleGothic') plt.rcParams['axes.unicode_minus'] = False sr = pd.Series( [90,90,55,60,76,80,76,88,30,25], name="국어점수" ) sr.index=['홍길동','이순신','임꺽정','정난정', '이이','이황','정도전','김철수1', '김철수2','김철수3'] sr
print(sr.max()) print(sr.nlargest(1,keep="all").index) print(sr[(sr>=50)&(sr<=80)]) print(sr[sr.index.str.contains('^김')]) print(sr.mean()) sr.drop(sr[sr<=40].index,inplace=True) #sr.apply(lambda v:v*1.1 if v>=50 else v*1.2) print(sr.sort_values(ascending=False).head()) print(sr.nlargest()) sr50=sr[sr>50] sr50.plot(kind='bar') #plt.plot() for i,v in sr.items(): if v>70: print(i,v,'합격',sep='\t') else: print(i,v,'불합격',sep='\t')
dataframe 예제
data = {'eng':[10,30,50,70], 'kor':[20,40,60,80], 'math':[90,50,20,70]} df = pd.DataFrame(data, index=['a','b','c','d'] ) df
1.인덱스 지정 iloc loc
df['eng']['a':'c'] df[1:3] df.iloc[1:3,[0,2]] df.loc['b':'c',['eng','math']]
condition1 = (df['age'] >= 20) & (df['age'] < 40) condition2 = (df['pclass'] < 3) df.loc[condition1 & condition2, ['survived', 'age']].head(10)
2.열끼리 합쳐서 새로운 열(컬럼) 만들기 : 열추가
#열추가 df['new']=[1,2,3,4] df['new2']=df['eng']+df['kor'] df
3. 값 더하기
df.loc['b':'c','kor':]=df.loc['b':'c','kor':]+2 df
4. 조건값 가져오기
df[(df['eng']>20) & (df['kor']>60)]
menuDF[menuDF['업종']=='한식'] menuDF[menuDF['상세주소'].str.contains('동래구')]
yeo =kdf.loc['여주'] yeo[ yeo['최저']<=-10 ]
5. 행추가
#행추가 df.loc['e']=[1,2,3,4,5] df
6. 행, 열 삭제
#삭제 df=df.drop(index=['a','c']) df=df.drop(columns=['kor'])
7.nan 값 넣기
#nan값 넣기 df.loc['c':'d','kor':]=np.nan df.isna().sum() df
8. nan값 채우기 fillna()
#nan값 채우기 fillna df['math']=df['math'].fillna(3) df
9. nan 삭제
#nan삭제 dfq=df.dropna(axis=1) df
10. 열 기준 값 정렬
df.sort_values(by="math",ascending=True)
11. 특정 값 변경
#값변경 df.loc['c','math']=999 df
12. 평균, 표준편차, 갯수 - describe mean std count
df.mean() df.std() df.count() df.describe()
13. 열합계 axis=1 , 행합계 axis=0
df['nw']=df[['eng','math']].sum(axis=1) df
pr1.loc['합계','dome']=pr1['dome'].sum(axis=0) pr1
bb.loc['합계']=bb.sum(axis=0) bb
14. 새로운 열 조건 만들기 apply
df['결과']=df.apply(lambda v:'합격' if v.mean()>=70 else '불합격',axis=1) df
15. 특정열만 뽑아서 표 만들기 합계까지 같이
pd.crosstab(df['eng'],df['math'], margins=True)
16. 상위 몇 개 뽑기 : nlargest
df.nlargest(2,'eng')
17. 특정열로 bar차트 그리기
df.plot(kind='bar',y=['eng','kor'])
18. 타입 확인 dtypes
pr1.dtypes
19. 쉼표 제거, 타입 변경 astype : 무엇을 변경할지 열을 지정해줘야함
pr1['dome']=pr1.dome.str.replace(',','').astype('int64')
20. 인덱스 다시 복구
pr1.reset_index()
csv 파일 dataframe 예제import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib from datetime import datetime matplotlib.rcParams['font.family']='Malgun Gothic' matplotlib.rcParams['axes.unicode_minus'] = False data1 = pd.read_csv('2014졸음.csv',encoding='euc-kr') data2 = pd.read_csv('2015졸음.csv',encoding='euc-kr') data3 = pd.read_csv('2016졸음.csv',encoding='euc-kr')
1. 데이터 합치기 concat
data=pd.concat([data1,data2,data3])
2. 특정열을 index 지정하기
data.set_index('구분',inplace=True)
3. 년도,월별로 index나누기
ans2=data.copy() ans2.index=pd.to_datetime(ans2.index,format='%Y년%m월') ans2.set_index([ans2.index.year,ans2.index.month],inplace=True) ans2.index.names=['년도','월'] ans2
4. 년도별 사망자 평균
y=ans2.groupby('년도').mean()[['사망(명)']]
5.2016년 사건대비 사망자
d_2016= (ans2.loc[2016,'사망(명)']).sum()/(ans2.loc[2016])['사고(건)'].sum()
6. 2014 사망자,부상자 차트
7. 2016사망자 - 2015사망자 차이
(ans2.loc[2016,'사망(명)']-ans2.loc[2015,'사망(명)']).nlargest(1,keep='all')
'DataAnalysis > 개념정리' 카테고리의 다른 글
pandas 걸측데이터 정리 (0) 2022.04.24 pandas dataframe 정리2 (0) 2022.04.24 Beautifulsoup 기본 정리 : 속성 및 태그 가져오기 (0) 2022.04.22 pandas dataframe csv파일 읽기, 만들기 (0) 2022.04.17