[파이썬] Pandas 기초

2021. 7. 25. 01:16공부한 내용/파이썬 문법

data = { 'name' : ['AA', 'IBM', 'GOOG'], 
	'date' : ['2001-12-01', '2012-02-10', '2010-04-09'],
	'shares' : [100, 30, 90],
	'price' : [12.3, 10.3, 32.2]}
df = pd.DataFrame(data)

 

1. Adding Columns & Setting Indexes

df['owner'] = 'Unknown'

 

(2) 행 인덱스 이름 변경

df.index = ['one', 'two', 'three']

 

(3) 특정 열을 행 인덱스로 설정하기

df = df.set_index(['name'])

 

 

2. Accessing & Deleting Data

(1) 특정 요소에 접근

#한 열에서 여러 행들 접근
df.loc["AA":"GOOG"]

#특정 요소에 접근
df.loc["AA"]['shares']

 

(2) 열 삭제

del df['owner']
df.drop('shares', axis = 1)

 

 

3. Filtering & Sorting Data

elemep = pd.io.parsers.read_csv("elemapi2v2.csv")

 

(1) Filtering Data

#조건 1개
highapi00 = elemap[elemap['api00']>700]
#조건 여러개
api00eighties = elemap[(elemap['api00']>=800)&(elemap['api00']<900)]

 

(2) Sorting

#by column
elemap = elemap.sort_values('api00')

#by index
elemap = elemap.sort_index()

 

 

4. Null Values and String in Data

(1) Null Values

#null값 유무 확인
df.isnull()
df.notnull()

#null값을 다른 값으로 대체
df.fillna(a)

 

(2) String in Data

#정확히 일치
df[df['owner']=='Unknown']

#시작문자 일치
df[df['owner'].str.startswith("Unk")]

#포함문자 일치
df[df['owner'].str.contains("know")]

 

 

5. Counting and Groupby

(1) Counting

#unique한 값들이 몇 번 등장했는지 개수 집계
elemap['api00'].value_counts()

 

(2) Groupby

elemap.groupby(['collcat']).size()
#여러 열로 그룹화 가능
elemap.groupby(['collcat', 'mealcat']).size()

 

 

6. Index

(1) 인덱스 세팅

#인덱스 전체 이름 설정
c = elemap.set_index(['snum'])

#여러 인덱스 존재 시, 각 인덱스 전체 이름 설정
cm = elemap.set_index(['snum', 'enroll']).sort_index()

#인덱스 리셋
cm = cm.reset_index()

 

(2) Hierarchical Indexing

#여러 인덱스 생성
data = pd.Series([10, 20, 30, 40, 15, 25, 35, 25], index = 
	[['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
	['obj1', 'obj2', 'obj3', 'obj4', 'obj1', 'obj2', 'obj3', 'obj4']])

#인덱스 나누기
data['b']
data[:, 'obj2']

#열 인덱싱
df = pd.DataFrame(np.arange(12).reshape(4, 3), 
	index = [['a', 'a', 'b', 'b'], ['one', 'two', 'three', 'four']],
	columns = [['num1', 'num2', 'num3'], ['red', 'green', 'red']])

#인덱스 이름 짓기
df.index.names=['key1', 'key2']
df.columns.names=['n', 'color']

#인덱스 나누기
df['num1']
df.loc['a','num1']
df.loc[("a", "one"), "num1"]

#인덱스 레벨 바꾸기
df.swaplevel('key1', 'key2')
#인덱스로 졍렬
df.sort_index(level='key2')
#통계 요약
df.sum(level = 'key1')
df.sum(level = 'color', axis=1)

 

 

7. Merging

(1) Merge

df1 = pd.DataFrame({ 'key' : ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1' : range(7)})
df2 = pd.DataFrame({ 'key' : ['a', 'b', 'd', 'b'], 'data2' : range(4)})
pd.merge(df1, df2)

#서로 다른 키로 병합
df1 = pd.DataFrame({ 'key1' : ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1' : range(7)})
df2 = pd.DataFrame({ 'key2' : ['a', 'b', 'd', 'b'], 'data1' : range(4)})
pd.merge(df1, df2, left_on='key1', right_on='key2')

 

(2) Left Join, Right Join, Outer Join

pd.merge(df1, df2, left_on='key1', right_on='key2', how="left")
pd.merge(df1, df2, left_on='key1', right_on='key2', how="right")
pd.merge(df1, df2, left_on='key1', right_on='key2', how="outer")

 

(3) Concatenation

s1 = pd.Series([0, 1], index=['a', 'b'])
s2 = pd.Series([2, 1, 3], index=['c', 'd', 'e'])
s3 = pd.Series([4, 7], index=['a', 'e'])
pd.concat([s1, s2])

#axis 1로 join
pd.concat([s1, s2], axis=1)

pd.concat([s1, s2, s3], keys=['one', 'two', 'three'])
pd.concat([df1,df2])
pd.concat([df1, df2], join="inner")

 

 

8. Update

-존재하는 데이터프레임을 대응하는 데이터프레임에 업데이트(똑같은 인덱스와 열 이름을 갖고 있어야 함)

a = pd.Series(np.arange(len(elemap)+1),name="meals")
elemap.update(a)

 

 

9. Data Transformation

(1) 중복행 제거

df = pd.DataFrame({'k1':['one']*3 + ['two']*4, 'k2':[1,1,2,3,3,4,4]})
df.drop_duplicates()
df.drop_duplicates(['k1']) #k1열값 기준 중복행 제거
df.drop_duplicates(['k1', 'k2'])  #k1, k2열값 기준 중복행 제거

 

(2) 값 교체

df.replace('one', 'One')
df.replace({'one':'One', 3:30})