import pandas as pd
df = pd.read_csv('./data/gapminder.tsv', sep='\t')
df #data frame
df.tail(3)
df.sample(3)
type(df)
df.shape
df.columns
df.dtypes
df.info()
열단위로 데이터 추출
df #data frame
country_df = df['country']
type(country_df) #특정 컬럼 하나만 뽑으면 시리즈 형태로 리턴이 된다.
country_df.head(2)
country_df.sample(2)
country_df.tail(2)
subset = df[['country', 'continent', 'year']] #여러개는 이중 괄호
subset
type(subset) #컬럼이 두개 이상부터는 데이터프레임으로 출력이 된다.
loc, iloc
df.loc[0~1703]
df.loc[-1] #-1은 뒤에서 첫번째지만, loc에서는 사용할 수 없다. 부여된 이름으로만 선택가능 0부터 1703까지
df.loc[[0,99,1703],['country','year']] #복수선택, 컬럼선택 예
df.loc[:5,['year','pop']] # 콜론 사용 예
df.iloc[0,0] #콤마를 기준으로 행,열
df.iloc[[0,99,1000],[0,1,-1]] #복수 선택 시 대괄호로 묶어줌, 인덱스로 찾는거라서 [-1] 사용가능
df.iloc[:,[0,1,-1]] #처음부터 끝까지
df.iloc[:9,[0,1,-1]] #0부터 9까지
#loc는 부여된 이름으로 검색, iloc는 숫자(인덱스)값으로만 검색
df.iloc[:10,0:5:2] #0부터 5까지 2칸씩 건너 뛰기
그룹화 groupby()
df.groupby('year')
df.groupby('year')['lifeExp'].mean() #.mean이 평균값을 구하는 함수
df_groupby_1 = df.groupby(['year','continent'])[['lifeExp','gdpPercap']].mean()
df_groupby_1.reset_index() #원래 인덱스로 있던 것을 컬럼으로 넣어주고, 새로운 행에 인덱스 값을 부여함
df.groupby('year')['lifeExp'].mean().plot() #그래프 그리기
#시리즈와 데이터프레임 만들기
s = pd.Series(['banana',42])
s = pd.Series(['Wes McKinney', 'creator of Pandas'],index = ['Person', 'Who'])
scientists = pd.DataFrame({
'Name' : ['A', 'B', 'C'],
'Age' : [12,13,14]
})
scientists #앞쪽의 키값은 컬럼이되고, 뒷쪽의 리스트는 벨류값이 된다.
scientists.columns #컬럼만 정렬
scientists.index
scientists.values
scientists.keys()
scientists['Age'].mean()
scientists['Age'].min() #최소값(컬럼이 숫자 아니면 오류남)
scientists['Age'].max() #최대값
scientists['Age'].std() #표준편차
scientists.mean() #숫자만 찾아서 평균값 구함
scientists = pd.read_csv('./data/scientist.csv') #로컬폴더 파일 불러오기
scientists[scientists['Age'].max() == scientists['Age']] #불린 추출, True이면 값을 가져오고, False이면 가져오지 않음
scientists.loc[[True, False, True, False,True, False, True, False]] #트루인 값만 가져옴(0,2,4,6)
[scientists['Age'].max() == scientists['Age']]
scientists[scientists['Age'].mean() < scientists['Age']] #불린 추출(평균보다 나이 많은 사람 찾기)
pd.Series([1,100]) + scientists['Age']
scientists['Died'] - scientists['Born'] #이렇게 쓰면 안됨
born = pd.to_datetime(scientists['Born'],format='%Y-%m-%d')
died = pd.to_datetime(scientists['Died'],format='%Y-%m-%d')
died-born # born값과 died값 각각 구해서 계산해줘야 함
scientists['born_dt'],scientists['died_dt'] = born,died
scientists.drop(axis=0, index=[]) #axis = 0이면 행, 1이면 열
scientists.drop(axis=1, columns=['Age'])
import matplotlib.pyplot as plt
anscombe = sns.load_dataset("anscombe")
anscombe.sample(4)
dataset_1 = anscombe[anscombe['dataset']=='IV']
dataset_2 = anscombe[anscombe['dataset']=='II']
dataset_3 = anscombe[anscombe['dataset']=='III']
dataset_4 = anscombe[anscombe['dataset']=='II']
plt.plot(dataset_1['x'],dataset_1['y']) #matplotlib 그래프, 선이 다 연결되어있음
plt.plot(dataset_1['x'],dataset_1['y'], '^') #삼각형으로 그래프 그려줌
fig = plt.figure()
axes1 = fig.add_subplot(2,2,1)
axes2 = fig.add_subplot(2,2,2)
axes3 = fig.add_subplot(2,2,3)
axes4 = fig.add_subplot(2,2,4)
axes1.plot(dataset_1['x'],dataset_1['y'],'or', label='data1')
axes2.plot(dataset_2['x'],dataset_2['y'],'om', label='data2')
axes3.plot(dataset_3['x'],dataset_3['y'],'ob', label='data3')
axes4.plot(dataset_4['x'],dataset_4['y'],'og', label='data4')
fig.legend(bbox_to_anchor=(0.3, 1.5), loc = 'upper left') #bbox_to_anchor = (좌우 값, 상하 값), loc = '생성 위치'
fig.tight_layout()
concat() #데이터가 월별 혹은 주별로 이루어져있을 때 사용하는 함수
inner join = 연결이 되는 것만 가져오는 것
outer join = 연결이 안되어도 모든 것 가져오는 것 디폴트 값
df1 = pd.read_csv('./data/concat_1.csv')
df2 = pd.read_csv('./data/concat_2.csv')
df3 = pd.read_csv('./data/concat_3.csv')
row_concat = pd.concat([df1,df2,df3])
new_row = pd.Series(['n1','n2','n3','n4'])
new_df = pd.DataFrame([['n1','n2','n3','n4']],columns=['A','B','C','D'])
new_df
pd.concat([df1, new_df]) #행에 연결
col_concat = pd.concat([df1,df2,df3],axis=1)
col_concat
df1.columns = ['A','B','C','D']
df2.columns = ['E','F','G','H']
df3.columns = ['A','C','F','H']
pd.concat([df1,df2,df3], join='inner')
df1.index=[0,1,2,3]
df2.index=[4,5,6,7]
df3.index=[0,2,5,7]
df3
pd.concat([df1,df2,df3],axis=1,join='inner')
pd.concat([df1,df2,df3],axis=1)
df1.append(df2,ignore_index=True)
#df1.append(df2)
merge() #디폴트 값 inner
person = pd.read_csv('./data/survey_person.csv')
site = pd.read_csv('./data/survey_site.csv')
survey = pd.read_csv('./data/survey_survey.csv')
visited = pd.read_csv('./data/survey_visited.csv')
person.sample()
site.sample()
survey.sample()
visited.sample()
1) pd.Series
컬럼이 하나인 데이터를 만들 때 사용됨
2) pd.DataFrame
시리즈가 모인 것이 데이터 프레임(다중 컬럼)
3) ignore_index=True
행 새로 정렬
4) .head()
상위 5개 까지만 표시해줌