데이터 프레임 만들기
import pandas as pd
# 데이터 프레임 생성
df = pd.DataFrame()
# 열 추가
df['Name'] = ['Jacky', 'Steven']
df['Age'] = [28, 23]
df['Driver'] = [True, Flase]
# 데이터프레임 출력
print(dataframe)
#결과
Name Age Driver
0 Jacky 28 True
1 Steven 23 False
# 열 생성
new_person = pd.Series(['Molly', 40, True], index = ['Name', 'Age', 'Driver'])
# 열 추가
df = df.append(new_person, ignore_index=True)
# 출력
print(df)
# 결과
Name Age Driver
0 Jacky 28 True
1 Steven 23 False
2 Molly 40 True
# 넘파이 배열로 데이터프레임 만들기
import numpy as np
data = [['jacky', 38, True], ['Steven', 25, False]]
matrix = np.array(data)
df2 = pd.DataFrame(matrix, columns=['Name', 'Age', 'Driver'])
#출력
print(df2)
#결과
Name Age Driver
0 jacky 38 True
1 Steven 25 False
# 원본 리스트 전달하여 데이터프레임 생성
df3 = df.DataFrame(data, columns=['Name', 'Age', 'Driver']
#출력
print(df3)
#결과
Name Age Driver
0 jacky 38 True
1 Steven 25 False
데이터프레임 차원 확인하기
# 데이터 프레임 차원 확인
print(df.shape)
#결과
(3, 3)
# 데이터프레임 통계값 확인하기
#dataframe.describe()
데이터프레임 탐색하기
import pandas as pd
# 데이터 url
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
# 데이터 적재
df = pd.read_csv(url)
print(df.iloc[0])
#결과
Name Allen, Miss Elisabeth Walton
PClass 1st
Age 29.0
Sex female
Survived 1
SexCode 1
print(df.iloc[1:4])
# 결과
Name: 0, dtype: object
Name PClass ... Survived SexCode
1 Allison, Miss Helen Loraine 1st ... 0 1
2 Allison, Mr Hudson Joshua Creighton 1st ... 0 0
3 Allison, Mrs Hudson JC (Bessie Waldo Daniels) 1st ... 0 1
# 인덱스 설정
df2 = df.set_index(df['Name'])
# 행 확인
print(df2.loc['Allen, Miss Elisabeth Walton'])
# 결과
Name Allen, Miss Elisabeth Walton
PClass 1st
Age 29.0
Sex female
Survived 1
SexCode 1
Name: Allen, Miss Elisabeth Walton, dtype: object
조건에 따라 행 선택하기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 'sex'열이 'female'인 행 중 처음 두 개를 출력
print(df[df['Sex'] == 'female'].head(2))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 female 1 1
1 Allison, Miss Helen Loraine 1st 2.0 female 0 1
# 65세 이상인 여성승객 출력
print(df[(df['Sex'] == 'female') & (df['Age'] >= 65)])
# 출력
Name PClass ... Survived SexCode
73 Crosby, Mrs Edward Gifford (Catherine Elizabet... 1st ... 1 1
[1 rows x 6 columns]
값 치환하기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 값 치환 후 두 개의 행 출력
print(df['Sex'].replace("female", "Woman").head(2))
# 출력
0 Woman
1 Woman
Name: Sex, dtype: object
# 여러개의 값 치환하기
print(df['Sex'].replace(["female", "male"], ["Woman", "Man"]).head(5))
# 출력
0 Woman
1 Woman
2 Man
3 Woman
4 Man
Name: Sex, dtype: object
# 값 치환 후 두 개의 행 출력
print(df.replace(1, "One").head(2))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 female One One
1 Allison, Miss Helen Loraine 1st 2.0 female 0 One
# 정규표현식을 이용하여 값 치환 후 두 개의 행 출력
print(df.replace(r"1st", "First", regex =True).head(2))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton First 29.0 female 1 1
1 Allison, Miss Helen Loraine First 2.0 female 0 1
# 딕셔너리로 바꿀 값을 매핑하여 전달하기
print(df.replace({"female: 1", "male:0"}).head(3))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 female 1 1
1 Allison, Miss Helen Loraine 1st 2.0 female 0 1
2 Allison, Mr Hudson Joshua Creighton 1st 30.0 male 0 0
# female과 male을 person으로 치환
print(df.replace(["female", "male"], "person").head(3))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 person 1 1
1 Allison, Miss Helen Loraine 1st 2.0 person 0 1
2 Allison, Mr Hudson Joshua Creighton 1st 30.0 person 0 0
열 이름 바꾸기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 열 이름 변경후 두 개의 행 출력
print(df.rename(columns={"PClass" : "Passenger Class"}).head(2))
# 출력
Name Passenger Class ... Survived SexCode
0 Allen, Miss Elisabeth Walton 1st ... 1 1
1 Allison, Miss Helen Loraine 1st ... 0 1
# 여러개의 열 이름 변경
print(df.rename(columns={"PClass" : "Passenger Class", "Sex" : "Gender"}).head(2))
# 출력
Name Passenger Class ... Survived SexCode
0 Allen, Miss Elisabeth Walton 1st ... 1 1
1 Allison, Miss Helen Loraine 1st ... 0 1
[2 rows x 6 columns]
import collections
# 딕셔너리 생성하기
column_names = collections.defaultdict(str)
# 키 생성
for name in df.columns:
column_names[name]
# 딕셔너리 출력
print(column_names)
# 출력
defaultdict(<class 'str'>, {'Name': '', 'PClass': '', 'Age': '', 'Sex': '', 'Survived': '', 'SexCode': ''})
최솟값, 최댓값, 합, 평균 계산 및 개수 세기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
print('최댓값: ', df['Age'].max())
print('최솟값: ', df['Age'].min())
print('평균: ', df['Age'].mean())
print('합: ', df['Age'].sum())
print('카운트: ', df['Age'].count())
# 출력
최댓값: 71.0
최솟값: 0.17
평균: 30.397989417989418
합: 22980.88
카운트: 756
# 수치형 열의 공분산 출력
print(df.cov())
# 출력
Age Survived SexCode
Age 203.320470 -0.430491 -0.382054
Survived -0.430491 0.225437 0.114070
SexCode -0.382054 0.114070 0.228230
# 수치형 열의 상관계수 출력
print(df.corr())
# 출력
Age Survived SexCode
Age 1.000000 -0.061254 -0.055138
Survived -0.061254 1.000000 0.502891
SexCode -0.055138 0.502891 1.000000
고유한 값 찾기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 고유한 값 출력
print(df['Sex'].unique())
# 출력
['female' 'male']
# 고유한 값과 등장횟수 출력
print(df['Sex'].value_counts())
# 출력
male 851
female 462
Name: Sex, dtype: int64
누락된 값 다루기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 누락된 값을 선택하고 두 개의 행을 출력
print(df[df['Age'].isnull()].head(2))
# 출력
Name PClass Age Sex Survived SexCode
12 Aubert, Mrs Leontine Pauline 1st NaN female 1 1
13 Barkworth, Mr Algernon H 1st NaN male 1 0
# NaN으로 값 변경하기
import numpy as np
df['Sex'] = df['Sex'].replace('male', np.nan)
열 삭제하기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 열 삭제하기
print(df.drop('Age', axis=1).head(2))
# 출력
Name PClass Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st female 1 1
1 Allison, Miss Helen Loraine 1st female 0 1
# 여러개 삭제하기
print(df.drop(['Age', 'Sex'], axis=1).head(2))
# 출력
Name PClass Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 1 1
1 Allison, Miss Helen Loraine 1st 0 1
행 삭제하기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 행 삭제하기
print(df[df['Sex'] != 'male'].head(2))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 female 1 1
1 Allison, Miss Helen Loraine 1st 2.0 female 0 1
# 중복 행 삭제하기
# duplicates 는 모든 열이 완벽히 동일한 행만 삭제함
print(df.drop_duplicates().head(2))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 female 1 1
1 Allison, Miss Helen Loraine 1st 2.0 female 0 1
# 일부 열만 대상으로 중복된 행 삭제
print(df.drop_duplicates(subset=['Sex']))
# 출력
Name PClass Age Sex Survived SexCode
0 Allen, Miss Elisabeth Walton 1st 29.0 female 1 1
2 Allison, Mr Hudson Joshua Creighton 1st 30.0 male 0 0
값에 따라 행 그룹핑하기
import pandas as pd
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 'Sex' 열의 값2으로 행을 그룹핑하고 평균을 계산
print(df.groupby('Sex').mean())
# 출력
Age Survived SexCode
Sex
female 29.396424 0.666667 1.0
male 31.014338 0.166863 0.0
# 행을 그룹핑하고 카운팅
print(df.groupby('Survived')['Name'].count())
Survived
0 863
1 450
Name: Name, dtype: int64
시간에 따라 행을 그룹핑하기
import pandas as pd
import numpy as np
# 날짜 범위 만들기
time_index = pd.date_range('06/06/2017', periods=100000, freq='30S')
# 데이터 프레임 생성
df = pd.DataFrame(index = time_index)
# 난숫값으로 열 생성
df['Sale_Amount'] = np.random.randint(1, 10, 100000)
# 주 단위로 행을 그룹핑하고 합을 계산
print(df.resample('W').sum())
# 출력
Sale_Amount
2017-06-11 86506
2017-06-18 100296
2017-06-25 100271
2017-07-02 101455
2017-07-09 100606
2017-07-16 10382
열 원소 순회하기
import pandas as pd
import numpy as np
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 처음 두 이름을 대문자로 바꾸어 출력
for name in df['Name'][0:2]:
print(name.upper())
# 출력
ALLEN, MISS ELISABETH WALTON
ALLISON, MISS HELEN LORAINE
# 리스트 컴프리헨션 사용하기
print([name.upper() for name in df['Name'][0:2]])
# 출력
['ALLEN, MISS ELISABETH WALTON', 'ALLISON, MISS HELEN LORAINE']
모든 열 원소에 함수 적용하기
import pandas as pd
import numpy as np
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 함수 생성
def uppercase(x):
return x.upper()
# 함수를 적용하고 출력
print(df['Name'].apply(uppercase)[0:2])
# 출력
0 ALLEN, MISS ELISABETH WALTON
1 ALLISON, MISS HELEN LORAINE
Name: Name, dtype: object
# Survived 열의 1을 Live로 0을 Dead로 변경
print(df['Survived'].map({1:'Live', 0:'Dead'})[:5])
# 출력
0 Live
1 Dead
2 Dead
3 Dead
4 Live
Name: Survived, dtype: object
# 각 열에서 가장 큰 값을 뽑기
print(df.apply(lambda x: max(x)))
# 출력
Name del Carlo, Mrs Sebastiano (Argenia Genovese)
PClass 3rd
Age 71.0
Sex male
Survived 1
SexCode 1
dtype: object
그룹에 함수 적용하기
import pandas as pd
import numpy as np
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
# 행을 그룹핑한 다음 함수를 적용
print(df.groupby('Sex').apply(lambda x: x.count()))
# 출력
Name PClass Age Sex Survived SexCode
Sex
female 462 462 288 462 462 462
male 851 851 468 851 851 851
데이터프레임 연결하기
import pandas as pd
import numpy as np
url = 'https://raw.githubusercontent.com/chrisalbon/simulated_datasets/master/titanic.csv'
df = pd.read_csv(url)
df2 = pd.read_csv(url)
# 행 방향으로 데이터프레임 연결
print(pd.concat([df, df2], axis=0))
# 출력
Name PClass ... Survived SexCode
0 Allen, Miss Elisabeth Walton 1st ... 1 1
1 Allison, Miss Helen Loraine 1st ... 0 1
2 Allison, Mr Hudson Joshua Creighton 1st ... 0 0
3 Allison, Mrs Hudson JC (Bessie Waldo Daniels) 1st ... 0 1
4 Allison, Master Hudson Trevor 1st ... 1 0
... ... ... ... ... ...
1308 Zakarian, Mr Artun 3rd ... 0 0
1309 Zakarian, Mr Maprieder 3rd ... 0 0
1310 Zenni, Mr Philip 3rd ... 0 0
1311 Lievens, Mr Rene 3rd ... 0 0
1312 Zimmerman, Leo 3rd ... 0 0
[2626 rows x 6 columns]
# 열 방향으로 데이터프레임 연결
print(pd.concat([df, df2], axis=1))
# 출력
Name PClass ... Survived SexCode
0 Allen, Miss Elisabeth Walton 1st ... 1 1
1 Allison, Miss Helen Loraine 1st ... 0 1
2 Allison, Mr Hudson Joshua Creighton 1st ... 0 0
3 Allison, Mrs Hudson JC (Bessie Waldo Daniels) 1st ... 0 1
4 Allison, Master Hudson Trevor 1st ... 1 0
... ... ... ... ... ...
1308 Zakarian, Mr Artun 3rd ... 0 0
1309 Zakarian, Mr Maprieder 3rd ... 0 0
1310 Zenni, Mr Philip 3rd ... 0 0
1311 Lievens, Mr Rene 3rd ... 0 0
1312 Zimmerman, Leo 3rd ... 0 0
[1313 rows x 12 columns]
'프로그래밍 > 파이썬' 카테고리의 다른 글
numpy 사용하기 벡터, 행렬, 배열 (0) | 2021.06.16 |
---|---|
파이썬으로 웹 크롤링하기(3) 동적 페이지 (0) | 2021.03.23 |
파이썬으로 웹 크롤링하기(2) 데이터 변환 (0) | 2021.03.22 |
파이썬으로 웹 크롤링 하기(1) 정적인 웹 페이지 (0) | 2021.03.22 |
2. 파이썬 자료구조 튜플 (0) | 2021.02.17 |