728x90
반응형
Pandas 기본 사용법
# 판다스(Pandas): 데이터를 효과적으로 처리하고, 보여줄 수 있도록 도와주는 라이브러리입니다.
# Numpy와 함께 사용되어 다양한 연계적인 기능을 제공합니다.
# 인덱스(Index)에 따라 데이터를 나열하므로 사전(Dictionary) 자료형에 가깝습니다.
# 시리즈(Series)를 기본적인 자료형으로 사용합니다.
# 시리즈(Series): 시리즈는 인덱스와 값으로 구성됩니다.
import pandas as pd
array = pd.Series(['사과', '바나나', '당근'], index=['a', 'b', 'c'])
print(array)
print(array['a'])
a 사과
b 바나나
c 당근
dtype: object
사과
import pandas as pd
data = {
'a': '사과',
'b': '바나나',
'c': '당근'
}
# Dict 자료형을 Series로 바꾸기
array = pd.Series(data)
print(array['a'])
사과
# 데이터 프레임
# 다수의 시리즈(Series)를 모아 처리하기 위한 목적으로 사용합니다.
# 표 형태로 데이터를 손쉽게 출력하고자 할 때 사용할 수 있습니다.
import pandas as pd
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 7
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
# 이름(Name): 값(Values)
summary = pd.DataFrame({
'word': word,
'frequency': frequency
})
print(summary)
word frequency
Apple 사과 3
Banana 바나나 5
Carrot 당근 7
# 시리즈의 연산
# 시리즈를 서로 연산하여 새로운 시리즈를 만들 수 있습니다.
import pandas as pd
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 7
}
importance_dict = {
'Apple': 3,
'Banana': 2,
'Carrot': 1
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
importance = pd.Series(importance_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency,
'importance': importance
})
score = summary['frequency'] * summary['importance']
summary['score'] = score
print(summary)
word frequency importance score
Apple 사과 3 3 9
Banana 바나나 5 2 10
Carrot 당근 7 1 7
#데이터 프레임의 슬라이싱
import pandas as pd
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근',
'Durian': '두리안'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 7,
'Durian': 2
}
importance_dict = {
'Apple': 3,
'Banana': 2,
'Carrot': 1,
'Durian': 1
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
importance = pd.Series(importance_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency,
'importance': importance
})
print(summary)
# 이름을 기준으로 슬라이싱
print(summary.loc['Banana':'Carrot', 'importance':])
# 인덱스를 기준으로 슬라이싱
print(summary.iloc[1:3, 2:])
print(summary.iloc[0:2, 0:2])
word frequency importance
Apple 사과 3 3
Banana 바나나 5 2
Carrot 당근 7 1
Durian 두리안 2 1
importance
Banana 2
Carrot 1
importance
Banana 2
Carrot 1
word frequency
Apple 사과 3
Banana 바나나 5
#데이터 프레임의 연산
import pandas as pd
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근',
'Durian': '두리안'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 7,
'Durian': 2
}
importance_dict = {
'Apple': 3,
'Banana': 2,
'Carrot': 1,
'Durian': 1
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
importance = pd.Series(importance_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency,
'importance': importance
})
print(summary)
summary.loc['Apple', 'importance'] = 5 # 데이터의 변경
summary.loc['Elderberry'] = ['엘더베리', 5, 3] # 새 데이터 삽입
print(summary)
word frequency importance
Apple 사과 3 3
Banana 바나나 5 2
Carrot 당근 7 1
Durian 두리안 2 1
word frequency importance
Apple 사과 3 5
Banana 바나나 5 2
Carrot 당근 7 1
Durian 두리안 2 1
Elderberry 엘더베리 5 3
#엑셀로 내보내기/불러오기
import pandas as pd
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 7
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency
})
summary.to_csv("summary.csv", encoding="utf-8-sig")
saved = pd.read_csv("summary.csv", index_col=0)
print(saved)
word frequency
Apple 사과 3
Banana 바나나 5
Carrot 당근 7
#데이터 프레임 자료형의 연산
import pandas as pd
array1 = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'])
array2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['B', 'C', 'D'])
print(array1)
print(array2)
array = array1.add(array2, fill_value=0)
print(array)
0 1
A 1 2
B 3 4
0 1 2
B 1 2 3
C 4 5 6
D 7 8 9
0 1 2
A 1.0 2.0 NaN
B 4.0 6.0 3.0
C 4.0 5.0 6.0
D 7.0 8.0 9.0
# 데이터 프레임 집계 함수
import pandas as pd
array1 = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'])
array2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['B', 'C', 'D'])
array = array1.add(array2, fill_value=0)
print(array)
print("컬럼 1의 합:", array[1].sum())
print(array.sum())
0 1 2
A 1.0 2.0 NaN
B 4.0 6.0 3.0
C 4.0 5.0 6.0
D 7.0 8.0 9.0
컬럼 1의 합: 21.0
0 16.0
1 21.0
2 18.0
dtype: float64
# 데이터 프레임 정렬 함수
import pandas as pd
import numpy as np
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근',
'Durian': '두리안'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 1,
'Durian': 2
}
importance_dict = {
'Apple': 3,
'Banana': 2,
'Carrot': 1,
'Durian': 1
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
importance = pd.Series(importance_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency,
'importance': importance
})
print(summary)
# 객체를 값에 따라 정렬할 경우, sort_values 메서드 이용
# 내림차순으로 정렬할 때, ascending=False 로 지정
summary = summary.sort_values('frequency', ascending=False)
print(summary)
word frequency importance
Apple 사과 3 3
Banana 바나나 5 2
Carrot 당근 1 1
Durian 두리안 2 1
word frequency importance
Banana 바나나 5 2
Apple 사과 3 3
Durian 두리안 2 1
Carrot 당근 1
Pandas 연산과 함수
# 데이터 프레임의 Null 여부 확인
import pandas as pd
import numpy as np
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근',
'Durian': '두리안'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': np.nan,
'Durian': 2
}
importance_dict = {
'Apple': 3,
'Banana': 2,
'Carrot': 1,
'Durian': 1
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
importance = pd.Series(importance_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency,
'importance': importance
})
print(summary)
print(summary.notnull())
print(summary.isnull())
# dropna는 결측치 NaN를 제거하는 방법이고, fillna( )는 다른 데이터로 채우는 방법
summary['frequency'] = summary['frequency'].fillna('데이터 없음')
print(summary)
word frequency importance
Apple 사과 3.0 3
Banana 바나나 5.0 2
Carrot 당근 NaN 1
Durian 두리안 2.0 1
word frequency importance
Apple True True True
Banana True True True
Carrot True False True
Durian True True True
word frequency importance
Apple False False False
Banana False False False
Carrot False True False
Durian False False False
word frequency importance
Apple 사과 3.0 3
Banana 바나나 5.0 2
Carrot 당근 데이터 없음 1
Durian 두리안 2.0 1
# 시리즈 자료형의 연산
import pandas as pd
array1 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
array2 = pd.Series([4, 5, 6], index=['B', 'C', 'D'])
# fill_value 옵션 : NaN 데이터를 입력값으로 적용후에 함수 적용
#add와 같은 산술연산함수를 적용할 때 fill_value 옵션을 적용하면 NaN이 발생할 경우 특정 값으로 대입할 수 있습니다.
array = array1.add(array2, fill_value=0)
print(array)
A 1.0
B 6.0
C 8.0
D 6.0
dtype: float64
#데이터 프레임 자료형의 연산
import pandas as pd
array1 = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'])
array2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['B', 'C', 'D'])
print(array1)
print(array2)
array = array1.add(array2, fill_value=0)
print(array)
0 1
A 1 2
B 3 4
0 1 2
B 1 2 3
C 4 5 6
D 7 8 9
0 1 2
A 1.0 2.0 NaN
B 4.0 6.0 3.0
C 4.0 5.0 6.0
D 7.0 8.0 9.0
# 데이터 프레임 집계 함수
import pandas as pd
array1 = pd.DataFrame([[1, 2], [3, 4]], index=['A', 'B'])
array2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['B', 'C', 'D'])
array = array1.add(array2, fill_value=0)
print(array)
print("컬럼 1의 합:", array[1].sum())
print(array.sum())
0 1 2
A 1.0 2.0 NaN
B 4.0 6.0 3.0
C 4.0 5.0 6.0
D 7.0 8.0 9.0
컬럼 1의 합: 21.0
0 16.0
1 21.0
2 18.0
dtype: float64
# 데이터 프레임 정렬 함수
import pandas as pd
import numpy as np
word_dict = {
'Apple': '사과',
'Banana': '바나나',
'Carrot': '당근',
'Durian': '두리안'
}
frequency_dict = {
'Apple': 3,
'Banana': 5,
'Carrot': 1,
'Durian': 2
}
importance_dict = {
'Apple': 3,
'Banana': 2,
'Carrot': 1,
'Durian': 1
}
word = pd.Series(word_dict)
frequency = pd.Series(frequency_dict)
importance = pd.Series(importance_dict)
summary = pd.DataFrame({
'word': word,
'frequency': frequency,
'importance': importance
})
print(summary)
# 객체를 값에 따라 정렬할 경우, sort_values
# 내림차순으로 정렬할 때, ascending=False 로 지정
summary = summary.sort_values('frequency', ascending=False)
print(summary)
word frequency importance
Apple 사과 3 3
Banana 바나나 5 2
Carrot 당근 1 1
Durian 두리안 2 1
word frequency importance
Banana 바나나 5 2
Apple 사과 3 3
Durian 두리안 2 1
Carrot 당근 1 1
Pandas 활용
# 데이터 프레임의 마스킹
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(1, 10, (3, 3)), index=[0, 1, 2], columns=["A", "B", "C"])
# 데이터 프레임 출력하기
print(df)
# 컬럼 A의 각 원소가 5보다 작거나 같은지 출력
print(df["A"] <= 5)
# 컬럼 A의 원소가 5보다 작고, 컬럼 B의 원소가 8보다 작은 행 추출
# query() : 조건 부합 데이터 추출
print(df.query("A <= 5 and B <= 8"))
# 데이터 프레임의 개별 연산
import pandas as pd
df = pd.DataFrame([[1, 2, 3, 4], [1, 2, 3, 4]], index=[0, 1], columns=["A", "B", "C", "D"])
print(df)
# lambda란 함수를 한 줄로 표현하는 익명 함수 기법
df = df.apply(lambda x: x + 1)
print(df)
# def 함수이름(): # 첫 행
# 본문 # 함수를 호출했을 때, 실행할 코드 블록
def addOne(x):
return x + 1
df = df.apply(addOne)
print(df)
A B C D
0 1 2 3 4
1 1 2 3 4
A B C D
0 2 3 4 5
1 2 3 4 5
A B C D
0 3 4 5 6
1 3 4 5 6
import pandas as pd
df = pd.DataFrame([
['Apple', 'Apple', 'Carrot', 'Banana'],
['Durian', 'Banana', 'Apple', 'Carrot']],
index=[0, 1],
columns=["A", "B", "C", "D"])
print(df)
df = df.replace({"Apple": "Airport"})
print(df)
A B C D
0 Apple Apple Carrot Banana
1 Durian Banana Apple Carrot
A B C D
0 Airport Airport Carrot Banana
1 Durian Banana Airport Carrot
# 데이터 프레임의 그룹화
import pandas as pd
df = pd.DataFrame([
['Apple', 7, 'Fruit'],
['Banana', 3, 'Fruit'],
['Beef', 5, 'Meal'],
['Kimchi', 4, 'Meal']],
columns=["Name", "Frequency", "Type"])
print(df)
# groupby : 주어진 데이터를 그룹 별로 구분하여 데이터를 보기 위해 사용되는 함수이다.
print(df.groupby(['Type']).sum())
Name Frequency Type
0 Apple 7 Fruit
1 Banana 3 Fruit
2 Beef 5 Meal
3 Kimchi 4 Meal
Frequency
Type
Fruit 10
Meal 9
import numpy as np
import pandas as pd
df = pd.DataFrame([
['Apple', 7, 5, 'Fruit'],
['Banana', 3, 6, 'Fruit'],
['Beef', 5, 2, 'Meal'],
['Kimchi', 4, 8, 'Meal']],
columns=["Name", "Frequency", "Importance", "Type"])
print(df)
# aggregate : 내가 원하는 함수를 직접 만들어 사용하고, dataframe에 적용시킬 수 있음
print(df.groupby(["Type"]).aggregate([min, max, np.average]))
Name Frequency Importance Type
0 Apple 7 5 Fruit
1 Banana 3 6 Fruit
2 Beef 5 2 Meal
3 Kimchi 4 8 Meal
Frequency Importance
min max average min max average
Type
Fruit 3 7 5.0 5 6 5.5
Meal 4 5 4.5 2 8 5.0
import pandas as pd
df = pd.DataFrame([
['Apple', 7, 5, 'Fruit'],
['Banana', 3, 6, 'Fruit'],
['Beef', 5, 2, 'Meal'],
['Kimchi', 4, 8, 'Meal']],
columns=["Name", "Frequency", "Importance", "Type"])
def my_filter(data):
return data["Frequency"].mean() >= 5
print(df)
#group객체.filter(조건식 함수)로 사용하며, 개별원소에 대한 필터링이 아니라, group객체를 필터링 한다는 것
df = df.groupby("Type").filter(my_filter)
print(df)
Name Frequency Importance Type
0 Apple 7 5 Fruit
1 Banana 3 6 Fruit
2 Beef 5 2 Meal
3 Kimchi 4 8 Meal
Name Frequency Importance Type
0 Apple 7 5 Fruit
1 Banana 3 6 Fruit
import pandas as pd
df = pd.DataFrame([
['Apple', 7, 5, 'Fruit'],
['Banana', 3, 6, 'Fruit'],
['Beef', 5, 2, 'Meal'],
['Kimchi', 4, 8, 'Meal']],
columns=["Name", "Frequency", "Importance", "Type"])
#get_group() 메서드로 특정 그룹만 가져오기
df = df.groupby("Type").get_group("Fruit")
print(df)
Name Frequency Importance Type
0 Apple 7 5 Fruit
1 Banana 3 6 Fruit
import pandas as pd
df = pd.DataFrame([
['Apple', 7, 5, 'Fruit'],
['Banana', 3, 6, 'Fruit'],
['Beef', 5, 2, 'Meal'],
['Kimchi', 4, 8, 'Meal']],
columns=["Name", "Frequency", "Importance", "Type"])
df["Gap"] = df.groupby("Type")["Frequency"].apply(lambda x: x - x.mean())
print(df)
Name Frequency Importance Type Gap
0 Apple 7 5 Fruit 2.0
1 Banana 3 6 Fruit -2.0
2 Beef 5 2 Meal 0.5
3 Kimchi 4 8 Meal -0.5
# 데이터 프레임의 다중화
import numpy as np
import pandas as pd
df = pd.DataFrame(
np.random.randint(1, 10, (4, 4)),
index=[['1차', '1차', '2차', '2차'], ['공격', '수비', '공격', '수비']],
columns=['1회', '2회', '3회', '4회']
)
print(df)
print(df[["1회", "2회"]].loc["2차"])
1회 2회 3회 4회
1차 공격 4 8 7 8
수비 5 8 4 7
2차 공격 8 6 8 4
수비 3 6 8 3
1회 2회
공격 8 6
수비 3 6
# 피벗 테이블의 기초
import numpy as np
import pandas as pd
df = pd.DataFrame([
['Apple', 7, 5, 'Fruit'],
['Banana', 3, 6, 'Fruit'],
['Coconut', 2, 6, 'Fruit'],
['Rice', 8, 2, 'Meal'],
['Beef', 5, 2, 'Meal'],
['Kimchi', 4, 8, 'Meal']],
columns=["Name", "Frequency", "Importance", "Type"])
print(df)
# 피벗(Pivot) 테이블이란 많은 양의 데이터에서 필요한 자료만을 뽑아 새롭게 표를 작성해 주는 기능
# 피벗 테이블을 사용하면 사용자 임의대로 데이터를 정렬하고 필터링 할 수 있음
# tips.pivot(index=[행 인덱스], columns=[열 인덱스], values=[분석하고자 하는 KEY FIGURE(변수)])
# aggfunc 라는 옵션을 통해 해당 데이터의 통계량을 바로 계산하는 것이 가능하다
# aggfunc : 데이터 축약 시 사용할 함수 (mean, sum, count ...)
출처: https://data-make.tistory.com/135 [Data Makes Our Future]
df = df.pivot_table(
index="Importance", columns="Type", values="Frequency",
aggfunc=np.max
)
print(df)
Name Frequency Importance Type
0 Apple 7 5 Fruit
1 Banana 3 6 Fruit
2 Coconut 2 6 Fruit
3 Rice 8 2 Meal
4 Beef 5 2 Meal
5 Kimchi 4 8 Meal
Type Fruit Meal
Importance
2 NaN 8.0
5 7.0 NaN
6 3.0 NaN
8 NaN 4.0
728x90
반응형
'Data Analysis > Data Analysis & Image Processing' 카테고리의 다른 글
17. 웹 크롤링 (0) | 2022.04.16 |
---|---|
16. Matplotlib (0) | 2022.04.16 |
14. KNN 숫자 인식 예제 (0) | 2022.04.16 |
13. KNN Algorithm (0) | 2022.04.16 |
12. OpenCV Filtering (0) | 2022.04.16 |
댓글