# 경고 무시
import warnings
warnings.filterwarnings(action='ignore')
# pandas 모듈 import
import pandas as pd
# Series 생성 1
se = pd.Series([1, 2, 3, 4])
se
print(se[0])
print(se[3])
print(se[len(se)-1])
se.index # 인덱스(index)
se.values # 값(value) # Series 안에 Numpy가 포함되어 있음.
se.index = ['a', 'b', 'c', 'd']
se
print(se['a'])
print(se['d'])
# Series 생성 2 - index 명시
se2 = pd.Series([17000, 18000, 1000, 5000],
index=["피자", "치킨", "콜라", "맥주"])
se2
se2.index
se2.values
se2['피자']
se2['치킨']
se = pd.Series([1, 2, 3, 4])
se > 2
se[se > 2]
se[~(se > 2)] # - => not
se[-(se > 2)] # - => not
### Series명[시작값:끝값]
se = pd.Series([1,2,3,4],
index=['a','b','c','d'])
se
se['b':'c']
se = pd.Series([1,2,3,4])
se
se[0:3]
se = pd.Series([1,2,3,4],
index=['a','b','c','d'])
se
se.sort_values(ascending=False)
se = pd.Series([1,2,3,4],
index=['a','b','c','d'])
se*2
se + 5
# 딕셔너리 생성
dict_a = {
'이름' : '홍길동',
'직업' : '의사',
'취미' : '인공지능',
'약점' : None
}
type(dict_a)
# 딕셔너리를 Series로 매핑
se3 = pd.Series(dict_a)
type(se3)
se3
se3.index
se3.values
se3.dtypes
se3['이름']
# Series 값 변경
se3['이름'] = 'Hong' # key는 중복이 안됨
se3['이름']
se3
se3.isnull()
se3[se3.isnull()]
# 1) fillna : 누락값 대체하기
se3 = se3.fillna("") # "" - 널스트링(null string)
se3
# 2) dropna : 누락값 삭제하기
se3.dropna()
se3 # 값 변경 => se3 = se3.dropna()
import numpy as np
se4 = pd.Series([1, np.nan, 2, np.nan, 3,
np.nan, 4, np.nan, 5])
se4
# 결측치 제외하기 1: dropna()
se4.dropna()
# 결측치 제외하기 2: notnull()
se4[se4.notnull()]
se4
# 결측치 값 대체하기 1: fillna()
se4.fillna(0)
se4.sum(), se4.mean()
# 결측치 값 대체하기 2: fillna(mean())
se4.fillna(se4.mean())
import pandas as pd
# 리스트로 데이타프레임 생성하기
data = [
['1000', 'Steve', 90.72],
['1001', 'James', 78.09],
['1002', 'Doyeon', 98.43]
]
df = pd.DataFrame(data)
df
type(data)
df = pd.DataFrame(data, columns=['학번', '이름', '점수'])
df
df.columns # 열 출력
df.index # 인덱스 출력
df.values # 값 출력
df.values.shape
friend_dict_list = [{'name': 'Jone', 'age': 20, 'job': 'student'},
{'name': 'Jenny', 'age': 30, 'job': 'developer'},
{'name': 'Nate', 'age': 30, 'job': 'teacher'}]
df = pd.DataFrame(friend_dict_list)
df
friend_dict_list = [{'name': 'Jone', 'age': 20, 'job': 'student'},
{'name': 'Jenny', 'age': 30, 'job': 'developer'},
{'name': 'Nate', 'age': 30, 'job': 'teacher'}]
df = pd.DataFrame(friend_dict_list, columns = ['age', 'job','name'])
df
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
type(df)
df.dtypes # 각 컬럼의 데이타타입 확인
df
df.head(2)
df.head() # 5개
df.tail(2)
df.tail() # 5개
df
df.loc[0] # 인덱스 0번 조회(가로)
df.iloc[0] # 인덱스 검색
df
df.loc[0:2] # 인덱스를 이용한 검색 => df[0:2]와 동일
df.iloc[0:2]
df
df.loc[[0, 2]]
df.loc[[0, 2]] # 순서적이지 않는 로우(행) 선택
df[0:2]
df
df['id'] # 컬럼명으로 조회(세로)
df.columns
df.id
df.name
df[['id', 'age']]
df
df.id==1
df.loc[df.id==1] # 컬럼 값에 의한 검색
df.loc[df.name=="Kim"]
# 이름이 "Kim"인 사람의 나이는?
df.loc[df.name=="Kim", 'age']
df.loc[df.name=="Kim", ['name','age']]
df
df.age > 25
df_filtered = df[df.age > 25]
df_filtered
df_filtered = df.query('age > 25')
df_filtered
df_filtered = df[(df.age > 25) & (df.name == 'Choi')]
df_filtered
df
# 데이타 panas로 불러오기 - 컬럼이름 있을 때
df = pd.read_csv('./data/friend_list_no_head.csv')
df
# 데이타 pandas로 불러오기 - 컬럼 이름이 없을 때
df = pd.read_csv('./data/friend_list_no_head.csv',
header = None,
names=['name', 'age', 'job'])
df
df.iloc[0:3] # 행(row)만 필터링
df.iloc[:, 0:2] # (모든 로우, 컬럼은 0부터 1까지만) 출력
df.iloc[:,[0,2]] # 모든 로우, 컬럼 0와 2만 출력
df.loc[:,['name', 'job']]
df
df_filtered = df[['name', 'age']]
df_filtered
df_filtered = df.loc[:, ['name', 'age']]
df_filtered
df.filter(items=['age', 'job'])
df.columns
df.filter(like='a',axis=1) # 컬럼 이름에 'a'가 포함된 컬럼 출력
df.columns
df.filter(regex='b$',axis=1) # 정규식을 이용한 필터 - 컬럼이름이 b로 끝나는 컬럼 출력
df.filter(regex='^a',axis=1) # 컬럼이름에서 a로 시작하는 컬럼 검색
df.columns
df2 = df.set_index('name')
df2
df2.filter(regex='^J',axis=0)
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
# 컬럼 추가하기
df['hobby'] = '영화감상'
df
# 컬럼 추가하기 - Series를 이용하여 다른 값 추가
newcol2 = pd.Series([ '서울' , None , '대구' ],
index = [ 2 , 1 , 0 ])
df[ 'address' ] = newcol2
df
# numpy를 이용하여 컬럼 추가하기
import numpy as np
df['salary'] = np.where(df['job'] != 'student' , 'yes', 'no')
df
# 컬럼 추가하기 - Series를 이용하여 다른 값 추가
newcol1 = pd.Series([ '서울' , None , '대구' ])
df['address'] = newcol1
df
sungjuk = [{'name': 'John', 'midterm': 95, 'final': 85},
{'name': 'Jenny', 'midterm': 85, 'final': 80},
{'name': 'Nate', 'midterm': 10, 'final': 30}]
df = pd.DataFrame(sungjuk,
columns = ['name', 'midterm', 'final'])
df
df['midterm']
df['total'] = df['midterm'] + df['final']
df
df['average'] = df['total'] / 2
df
df['average']
grade = []
for row in df['average']:
if row >= 90:
grade.append('A')
elif row >= 80:
grade.append('B')
elif row >= 70:
grade.append('C')
else:
grade.append('F')
grade
df['grade'] = grade
df
def pass_or_fail(row):
print(row)
if row != "F":
return 'Pass'
else:
return 'Fail'
df['grade2'] = df.grade.apply(pass_or_fail)
df
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
# 로우(행) 추가 - 인덱스 이용
df.loc[3] = [4, 'Hong', 30, 786.9, 'CEO']
df
# 새로운 데이타 프레임을 생성하여 데이타프레임 추가하기
df2 = pd.DataFrame([['5', 'Park', 30, 300.6, 'Mom']],
columns = ['id', 'name', 'age', 'assets', 'job'])
df2
df = df.append(df2, ignore_index=True)
df
date_list = [{'birthday': '2000-06-27'},
{'birthday': '2002-09-24'},
{'birthday': '2005-12-20'}]
df = pd.DataFrame(date_list, columns = ['birthday'])
df
df.info()
'2020-01-01'.split('-')
def extract_year(row):
return row.split('-')[0]
df['birthday']
df['year'] = df['birthday'].apply(extract_year)
df
df.dtypes
키워드 파라미터를 사용하시면, apply가 적용된 함수에 파라미터를 전달하실 수 있습니다.
def extract_year(year, current_year):
return current_year - int(year)
df['age'] = df['year'].apply(extract_year, current_year=2020)
df
키워드 파라미터를 추가해주시면, 원하시는만큼의 파라미터를 함수에 전달 가능합니다.
def get_introduce(age, prefix, suffix):
return prefix + str(age) + suffix
df['introduce'] = df['age'].apply(get_introduce,
prefix="I am ", suffix=" years old")
df
axis=1이라는 키워드 파라미터를 apply 함수에 전달해주면, 모든 컬럼을 지정된 함수에서 사용 가능합니다.
def get_introduce2(row):
return "I was born in "+str(row.year)+" my age is "+str(row.age)
df.introduce = df.apply(get_introduce2, axis=1)
df
1) 컬럼 제거하기 1 : df.drop('컬럼명', axis = 1)
2) 컬럼 제거하기 2 : del df.['컬럼명'] => 주의: 실제로 컬럼이 지워짐
3) 로우 제거하기 : df.drop(index = 인덱스번호, axis = 0)
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
# 컬럼 제거하기 : df.drop()
df.drop('id', axis = 1) # axis = 1 세로축
# 컬럼 제거하기 : df.drop() => 바로 적용하는 옵션 inplace=True
df.drop('id', axis = 1, inplace=True)
df
# 컬럼값을 이용한 컬럼 제거하기
df[df.age != 30]
df
df
# 컬럼 제거하기 : del df['컬럼명'] => 주의) 실제로 데이타프레임에서 지워짐
del df['id']
df
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
# 인덱스를 이용하여 로우 제거하기
df.drop(index=0, axis=0) # df.drop(0, axis = 0) # axis = 0 가로축
df
df = df.drop(df.index[[0,2]]) # 로우가 제거된 데이타 프레임 저장
df
df.drop(['Kim', 'Choi'], inplace = True)
df
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data, index = ['Kim', 'Lee', 'Choi'])
df
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data, index = [1, 2, 3])
df
df.set_index('name', drop = True, inplace=True )
df
# 인덱스를 이용한 로우 제거하기
df.drop(['Kim', 'Choi'])
df
import pandas as pd
# 중복 데이타를 갖는 데이타프레임 만들기
df = pd.DataFrame({'c1': ['a', 'a', 'b', 'a', 'b'],
'c2': [1, 1, 1, 2, 2],
'c3': [1, 1, 2, 3, 3]})
df
df.duplicated()
df_dup = df.duplicated()
print(df_dup)
df
df['c2'].duplicated()
col_dup = df['c2'].duplicated()
print(col_dup)
import pandas as pd
# 중복 데이타를 갖는 데이타프레임 만들기
df = pd.DataFrame({'c1': ['a', 'a', 'b', 'a', 'b'],
'c2': [1, 1, 1, 2, 2],
'c3': [1, 1, 2, 3, 3]})
print(df)
df.drop_duplicates()
df2 = df.drop_duplicates()
print(df2)
df.drop_duplicates(subset=['c2'])
df
df.drop_duplicates(subset=['c2', 'c3'])
import pandas as pd
import numpy as np
# read_csv() 함수로 df 생성
df = pd.read_csv('./data/auto-mpg.csv', header=None)
# 열 이름 지정
df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower',
'weight', 'acceleration', 'model year',
'origin', 'name']
df.head()
df.info()
df['horsepower'].unique()
df['horsepower'].replace('?', np.nan, inplace=True) # '?'을 np.nap으로 변경
df['horsepower'].unique()
df.dropna(subset=['horsepower'], axis=0, inplace=True) # 누락 데이타 행 삭제
df['horsepower'] = df['horsepower'].astype('float') # 문자열을 실수형으로 변환
df['horsepower'].dtypes
df['horsepower'].describe() # 기술통계
df.describe()
df['horsepower'].hist(bins=3)
count, bin_dividers = np.histogram(df['horsepower'], bins=3) # 4개의 경계값, 3개의 구간이 만들어짐
print(bin_dividers)
bin_names = ['저출력', '보통출력', '고출력']
df['hp_bin'] = pd.cut(x=df['horsepower'], # 데이타 배열
bins=bin_dividers, # 경계값 리스트
labels=bin_names, # bin 이름
include_lowest=True) # 첫 경계값 포함
df[['horsepower', 'hp_bin']]
print(df[['horsepower', 'hp_bin']].head(20))
df[['horsepower']].describe()
bin_dividers = np.array([0., 100., 126., 231.])
bin_dividers
bin_names = ['저출력', '보통출력', '고출력']
df['hp_bin'] = pd.cut(x=df['horsepower'], # 데이타 배열
bins=bin_dividers, # 경계값 리스트
labels=bin_names, # bin 이름
include_lowest=True) # 첫 경계값 포함
print(df[['horsepower', 'hp_bin']].head(20))
student_list = [{'name': 'John', 'major': "Computer Science", 'sex': "male"},
{'name': 'Nate', 'major': "Computer Science", 'sex': "male"},
{'name': 'Abraham', 'major': "Physics", 'sex': "male"},
{'name': 'Brian', 'major': "Psychology", 'sex': "male"},
{'name': 'Janny', 'major': "Economics", 'sex': "female"},
{'name': 'Yuna', 'major': "Economics", 'sex': "female"},
{'name': 'Jeniffer', 'major': "Computer Science", 'sex': "female"},
{'name': 'Edward', 'major': "Computer Science", 'sex': "male"},
{'name': 'Zara', 'major': "Psychology", 'sex': "female"},
{'name': 'Wendy', 'major': "Economics", 'sex': "female"},
{'name': 'Sera', 'major': "Psychology", 'sex': "female"}
]
df = pd.DataFrame(student_list, columns = ['name', 'major', 'sex'])
df
df.groupby(by='major')['name'].size()
df.groupby(by='sex')['name'].size()
df_major = pd.DataFrame(df.groupby('major')['name'].size())
df_major
df_major.columns
df_major.columns = ['count']
df_major
df_major.plot(kind='bar')
df_major.plot(kind='barh')
df_major.plot(kind='box')
df_major.index
df_major.columns
df_major.loc['Economics']
groupby_major = df.groupby('major')
groupby_major.groups
for name, group in groupby_major:
print(name + ": " + str(len(group)))
print(group)
print()
df_major_cnt = pd.DataFrame({'count' : groupby_major.size()}).reset_index()
df_major_cnt
groupby_sex = df.groupby('sex')
for name, group in groupby_sex:
print(name + ": " + str(len(group)))
print(group)
print()
df_sex_cnt = pd.DataFrame({'count' : groupby_sex.size()}).reset_index()
df_sex_cnt
import seaborn as sns
df = sns.load_dataset("mpg")
df.shape
df.head(1)
df['origin'].value_counts()
# origin별 cylinder 수
df.groupby(by="origin")['cylinders'].size()
df2 = pd.DataFrame(df.groupby(by="origin")['cylinders'].size())
df2
df['origin'].value_counts()
df3 = pd.DataFrame(df.groupby(['origin'])['cylinders'].mean())
df3
df3 = pd.DataFrame(df.groupby(['model_year', 'origin'])['cylinders'].mean())
df3
df3.index
school_id_list = [{'name': 'John', 'job': "teacher", 'age': 40},
{'name': 'Nate', 'job': "teacher", 'age': 35},
{'name': 'Yuna', 'job': "teacher", 'age': 37},
{'name': 'Abraham', 'job': "student", 'age': 10},
{'name': 'Brian', 'job': "student", 'age': 12},
{'name': 'Janny', 'job': "student", 'age': 11},
{'name': 'Nate', 'job': "teacher", 'age': None},
{'name': 'John', 'job': "student", 'age': None}
]
df = pd.DataFrame(school_id_list, columns = ['name', 'job', 'age'])
df
df.info()
df.isna()
df.isnull()
# 0으로 변경하기
tmp = df.copy()
tmp["age"] = tmp["age"].fillna(0)
tmp
school_id_list = [{'name': 'John', 'job': "teacher", 'age': 40},
{'name': 'Nate', 'job': "teacher", 'age': 35},
{'name': 'Yuna', 'job': "teacher", 'age': 37},
{'name': 'Abraham', 'job': "student", 'age': 10},
{'name': 'Brian', 'job': "student", 'age': 12},
{'name': 'Janny', 'job': "student", 'age': 11},
{'name': 'Nate', 'job': "teacher", 'age': None},
{'name': 'John', 'job': "student", 'age': None}
]
df = pd.DataFrame(school_id_list, columns = ['name', 'job', 'age'])
df
df.isna()
tmp = df.copy()
tmp["age"].mean()
tmp = df.copy()
tmp["age"] = tmp["age"].fillna(tmp["age"].mean())
tmp
school_id_list = [{'name': 'John', 'job': "teacher", 'age': 40},
{'name': 'Nate', 'job': "teacher", 'age': 35},
{'name': 'Yuna', 'job': "teacher", 'age': 37},
{'name': 'Abraham', 'job': "student", 'age': 10},
{'name': 'Brian', 'job': "student", 'age': 12},
{'name': 'Janny', 'job': "student", 'age': 11},
{'name': 'Nate', 'job': "teacher", 'age': None},
{'name': 'John', 'job': "student", 'age': None}
]
df = pd.DataFrame(school_id_list, columns = ['name', 'job', 'age'])
df
df.groupby("job")["age"].median()
df.groupby("job")["age"].transform("median")
df["age"].fillna(df.groupby("job")["age"].transform("median"), inplace=True)
df
import pandas as pd
# 딕셔너리로 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
df.T
df.values # 전체 값 추출하기 - Numpy 형태
# 특정 컬럼 값 추출
df['name'].values
# 로우와 컬럼 지정으로 특정 값 선택
df.iloc[1]['name']
import numpy as np
import pandas as pd
se = pd.Series(range(10),
index=[10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
se.index.name = "index"
se
se = se.sort_index() # 오름차순 정렬
se
se = se.sort_index(ascending = False) # 내림차순 정렬
se
# 데이타프레임 생성
data = {
'id' : [1, 2, 3],
'name' : ['Kim', 'Lee', 'Choi'],
'age' : [10, 20, 30],
'assets' : [150.4, 123.4, 56.6],
'job' : ['student', 'CEO', 'Dad']
}
df = pd.DataFrame(data)
df
# 나이의 역순으로 정렬
df.sort_index(by='age', ascending=False)
# 나이의 assets(자산) 순으로 정렬
df.sort_index(by='assets', ascending=True)
# Kim의 나이 컬럼을 30으로 변경하기
df.loc[df.name=='Kim', 'age'] = 30
df
# 나이 순으로 내림차순, 자산순으로 오름차순 정렬
df.sort_index(by=['age', 'assets'], ascending=[False, True])
l1 = [{'name': 'John', 'job': "teacher"},
{'name': 'Nate', 'job': "student"},
{'name': 'Fred', 'job': "developer"}]
l2 = [{'name': 'Ed', 'job': "dentist"},
{'name': 'Jack', 'job': "farmer"},
{'name': 'Ted', 'job': "designer"}]
df1 = pd.DataFrame(l1, columns = ['name', 'job'])
df2 = pd.DataFrame(l2, columns = ['name', 'job'])
frames = [df1, df2]
result = pd.concat(frames, ignore_index=True)
result
l1 = [{'name': 'John', 'job': "teacher"},
{'name': 'Nate', 'job': "student"},
{'name': 'Jack', 'job': "developer"}]
l2 = [{'age': 25, 'country': "U.S"},
{'age': 30, 'country': "U.K"},
{'age': 45, 'country': "Korea"}]
df1 = pd.DataFrame(l1, columns = ['name', 'job'])
df2 = pd.DataFrame(l2, columns = ['age', 'country'])
result = pd.concat([df1, df2], axis=1, ignore_index=True)
result
l1 = [{'name': 'John', 'job': "teacher"},
{'name': 'Nate', 'job': "student"},
{'name': 'Fred', 'job': "developer"}]
l2 = [{'name': 'Ed', 'job': "dentist"},
{'name': 'Jack', 'job': "farmer"},
{'name': 'Ted', 'job': "designer"}]
df1 = pd.DataFrame(l1, columns = ['name', 'job'])
df2 = pd.DataFrame(l2, columns = ['name', 'job'])
result = df1.append(df2, ignore_index=True)
result
import pandas as pd
member_df = pd.DataFrame({
'고객번호': [1001, 1002, 1003, 1004, 1005, 1006, 1007],
'이름': ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF', 'GGG']
}, columns=['고객번호', '이름'])
print(member_df)
transaction_df = pd.DataFrame({
'고객번호': [1001, 1001, 1005, 1006, 1008, 1001],
'금액': [10000, 20000, 15000, 5000, 100000, 30000]
}, columns=['고객번호', '금액'])
print(transaction_df)
inner_result = pd.merge(member_df, transaction_df, how = 'inner')
print(inner_result)
inner_result = pd.merge(member_df, transaction_df, how = 'left')
print(inner_result)
inner_result = pd.merge(member_df, transaction_df, how = 'right')
print(inner_result)
inner_result = pd.merge(member_df, transaction_df, how = 'outer')
print(inner_result)
#### Series 연산
fruit1 = pd.Series([ 5 , 9 , 10 ],
index = [ 'apple' , 'banana' , 'cherry'])
fruit2 = pd.Series([ 3 , 2 , 9 , 5 ],
index = [ 'apple' , 'orange' , 'banana', 'mango'])
print (fruit1, '\n')
print (fruit2, '\n')
fruit1 + fruit2
#### Dataframe 연산
fruitData1 = { 'Ohio' : [ 4 , 8 , 3],
'Texas' : [ 0 , 1 , 2]}
fruitFrame1 = pd.DataFrame(fruitData1,
columns = [ 'Ohio' , 'Texas' ],
index = [ 'apple' , 'banana' , 'cherry'])
fruitData2 = { 'Ohio' : [ 3 , 0 , 2, 7],
'Colorado' : [ 5 , 4 , 3 , 6]}
fruitFrame2 = pd.DataFrame(fruitData2,
columns = [ 'Ohio' , 'Colorado' ],
index = [ 'apple' , 'orange' , 'banana' , 'mango' ])
print (fruitFrame1)
print (fruitFrame2)
fruitFrame1 + fruitFrame2
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': [1.0, 2.0, 3.0],
'C': ['1.1.2019', '2.1.2019', '3.1.2019'],
'D': ['1 days', '2 days', '3 days'],
'E': ['1', '2', '3']})
df
df.dtypes # 컬럼의 데이타타입 확인
# 컬럼 A의 데이타타입을 실수로 변경하고, 컬럼 B를 정수로 데이타타입 변경.
df['A'].astype('float')
df['B'].astype('int')
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': [1.0, 2.0, 3.0],
'C': ['1.1.2019', '2.1.2019', '3.1.2019'],
'D': ['1 days', '2 days', '3 days'],
'E': ['1', '2', '3']})
df
pd.to_numeric(df['E'])
# Ignore the error, return the original input if it cannot be converted
pd.to_numeric(pd.Series(['1', '2', 'a']), errors='ignore')
df = pd.DataFrame({'A': [1, 'x', 'z'],
'B': [1.0, 2.0, 3.0],
'C': [True, False, True]})
df
pd.to_numeric(df.A, errors='coerce').isnull()
df[pd.to_numeric(df.A, errors='coerce').isnull()]
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0],
'C': ['1.1.2019', '2.1.2019', '3.1.2019'],
'D': ['1 days', '2 days', '3 days'],
'E': ['1', '2', '3']})
df
pd.to_datetime(df['C'])
pd.to_datetime('2.1.2011', dayfirst=True)
pd.to_timedelta(df['D'])
friend_list = [ ['John', 20, 'student'],['Jenny', 30, 'developer'],['Nate', 30, 'teacher'] ]
column_name = ['name', 'age', 'job']
df = pd.DataFrame.from_records(friend_list, columns=column_name)
df
df.to_csv('friend_list.csv')
friend_list = [ ['John', 20, 'student'],
['Jenny', 30, 'developer'],
['Nate', 30, 'teacher'] ]
df = pd.DataFrame.from_records(friend_list)
df
df.to_csv('friend_list2.csv', header = False, index = False)
df.to_csv('friend_list3.csv', header = ['name', 'age', 'job'])
friend_list = {
'name': ['John', None, 'nate'],
'age': [20,None,30],
'job':['student', 'developer', 'teacher']
}
df = pd.DataFrame(friend_list)
df
df.to_csv('friend_list4.csv')
df.to_csv('friend_list5', na_rep = '-')
import pandas as pd
data_frame = pd.read_csv('./data/friend_list.csv')
data_frame.head()
# 엑셀파일을 데이타프레임으로 불러오기
# pip install xlrd
df2 = pd.read_excel('./data/friend_list.xlsx')
df2
# 엑셀로 저장하기
df2.to_excel('./data/friend_list2.xlsx', 'sheet1')
# 엑셀로 저장하기
df2.to_excel('./data/friend_list2.xlsx', 'sheet1', index=False)
# pandas -> excel -> pandas 읽기
df3 = pd.read_excel('./data/friend_list2.xlsx', 'sheet1')
df3
# html에서 <table> 태그로 되어 있는 테이블 불러오기
df_list = pd.read_html('https://www.fdic.gov/bank/individual/failed/banklist.html')
df_list
# 테이블 개수 확인
len(df_list) # 1개
df_list[0] # 1개 테이블 확인하기
import pandas as pd
df = pd.read_excel('./data/남북한발전전력량.xlsx') # 데이터프레임 변환
df_ns = df.iloc[[0, 5], 3:] # 남한, 북한 발전량 합계 데이터만 추출
df_ns.index = ['South','North'] # 행 인덱스 변경
df_ns.columns = df_ns.columns.map(int) # 열 이름의 자료형을 정수형으로 변경
print(df_ns.head())
# 선 그래프 그리기
df_ns.plot()
# 행, 열 전치하여 다시 그리기
tdf_ns = df_ns.T
print(tdf_ns.head())
tdf_ns.plot()
import pandas as pd
df = pd.read_excel('./data/남북한발전전력량.xlsx') # 데이터프레임 변환
df_ns = df.iloc[[0, 5], 3:] # 남한, 북한 발전량 합계 데이터만 추출
df_ns.index = ['South','North'] # 행 인덱스 변경
df_ns.columns = df_ns.columns.map(int) # 열 이름의 자료형을 정수형으로 변경
# 행, 열 전치하여 막대 그래프 그리기
tdf_ns = df_ns.T
print(tdf_ns.head())
tdf_ns.plot(kind='bar')
import pandas as pd
df = pd.read_excel('./data/남북한발전전력량.xlsx') # 데이터프레임 변환
df_ns = df.iloc[[0, 5], 3:] # 남한, 북한 발전량 합계 데이터만 추출
df_ns.index = ['South','North'] # 행 인덱스 변경
df_ns.columns = df_ns.columns.map(int) # 열 이름의 자료형을 정수형으로 변경
# 행, 열 전치하여 히스토그램 그리기
tdf_ns = df_ns.T
tdf_ns.plot(kind='hist')
import pandas as pd
# read_csv() 함수로 df 생성
df = pd.read_csv('./data/auto-mpg.csv', header=None)
# 열 이름을 지정
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
'acceleration','model year','origin','name']
# 2개의 열을 선택하여 산점도 그리기
df.plot(x='weight',y='mpg', kind='scatter')
import pandas as pd
# read_csv() 함수로 df 생성
df = pd.read_csv('./data/auto-mpg.csv', header=None)
# 열 이름을 지정
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
'acceleration','model year','origin','name']
# 열을 선택하여 박스 플롯 그리기
df[['mpg','cylinders']].plot(kind='box')
df.plot(kind='box')