320x100
# Importing From Excel Files with pd.read_excel()
## First Steps - NEW (from Pandas Version 0.24x)
import pandas as pd
sales = pd.read_excel('sales.xls')
sales
'''
Unnamed: 0 City Country Sales Bonus
0 Mike New York USA 25 2.50
1 Jim Boston USA 43 4.30
2 Steven London UK 76 7.60
3 Joe Madrid Spain 12 1.80
4 Tom Paris France 89 13.35
'''
# index_col을 통해서 엑셀을 열어봤을때 첫번째 컬럼을 열게된다. - index_col = 0
sales = pd.read_excel('sales.xls', index_col=0)
sales
'''
City Country Sales Bonus
Mike New York USA 25 2.50
Jim Boston USA 43 4.30
Steven London UK 76 7.60
Joe Madrid Spain 12 1.80
Tom Paris France 89 13.35
'''
sales.info()
'''
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, Mike to Tom
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 City 5 non-null object
1 Country 5 non-null object
2 Sales 5 non-null int64
3 Bonus 5 non-null float64
dtypes: float64(1), int64(1), object(2)
memory usage: 200.0+ bytes
'''
# header로 쓰기에 적합한 rows가 없다면 즉, header를 설정 안해줘도 되는 상태라면
# header = None으로 하고, 각 컬럼에 붙은 인덱스 넘버를 names 후처리로 변경하거나, 아예 header의 각 컬럼 인덱스 번호가 들어갈 자리에
# 들어갈 값을 지정해준다.
pd.read_excel('sales.xls', index_col = 0, header = None)
'''
1 2 3 4
0
NaN City Country Sales Bonus
Mike New York USA 25 2.5
Jim Boston USA 43 4.3
Steven London UK 76 7.6
Joe Madrid Spain 12 1.8
Tom Paris France 89 13.35
'''
pd.read_excel('sales.xls', index_col = 0, header = None, names = ['Name', 'Loc_City', 'Loc_Country', 'Revenue', 'Add_Comp'])
'''
Loc_City Loc_Country Revenue Add_Comp
Name
NaN City Country Sales Bonus
Mike New York USA 25 2.5
Jim Boston USA 43 4.3
Steven London UK 76 7.6
Joe Madrid Spain 12 1.8
Tom Paris France 89 13.35
'''
# 엑셀 상의 시트에서 컬럼명이 A부터 E까지 있었다.
# 그 중에서 A부터 C까지의 컬럼을 긁어오는 것이다.
pd.read_excel('sales.xls', usecols= 'A:C')
'''
Unnamed: 0 City Country
0 Mike New York USA
1 Jim Boston USA
2 Steven London UK
3 Joe Madrid Spain
4 Tom Paris France
'''
# 부분적 컬럼을 이용하고 싶을경우 1 - 단일 컬럼
pd.read_excel('sales.xls', usecols='A')
'''
Unnamed: 0
0 Mike
1 Jim
2 Steven
3 Joe
4 Tom
'''
# 부분적 컬럼을 이용하고 싶을경우 2 - A부터 마지막까지 연속되게
# A부터 D까지의 컬럼
pd.read_excel('sales.xls', usecols= 'A:D')
'''
Unnamed: 0 City Country Sales
0 Mike New York USA 25
1 Jim Boston USA 43
2 Steven London UK 76
3 Joe Madrid Spain 12
4 Tom Paris France 89
'''
# 부분적 컬럼을 이용하고 싶을경우 3 - A컬럼과 C부터 E컬럼까지 가져오고 싶을 때
# 이건 헷갈릴만 하다.
pd.read_excel('sales.xls', usecols='A, C:E')
'''
Unnamed: 0 Country Sales Bonus
0 Mike USA 25 2.50
1 Jim USA 43 4.30
2 Steven UK 76 7.60
3 Joe Spain 12 1.80
4 Tom France 89 13.35
'''
# 부분적 컬럼을 이용하고 싶을경우 4 - C컬럼부터 마지막 까지
pd.read_excel('sales.xls', usecols='C:')
# 아무것도 안뜨거나, 인덱스 에러 메세지가 뜬다.
# 부분적 컬럼을 이용하고 싶을경우 5 - 해당 컬럼 인덱스 넘버를 이용해서
# pd.read_excel('sales.xls', usecols=0)
# ValueError: Passing an integer for `usecols` is no longer supported. Please pass in a list of int from 0 to `usecols` inclusive instead.
# 쉽게 말하자면 usecols의 값에 대해서는 리스트화 해서 입력해줘라. 라는 뜻이 뜬다.
pd.read_excel('sales.xls', usecols=[0])
'''
Unnamed: 0
0 Mike
1 Jim
2 Steven
3 Joe
4 Tom
'''
# 부분적 컬럼을 이용하고 싶을경우 6 - 숫자 컬럼으로 2번부터 끝까지
pd.read_excel('sales.xls', usecols=[2:])
# SyntaxError: invalid syntax
# 이것도 컬럼을 loc처럼 긁어오는 것이 에러가 나듯이 에러가 난다.
# 물론 에러문구는 틀리지만.
# 부분적 컬럼을 이용하고 싶을경우 7 - 숫자 컬럼으로 부분 부분
pd.read_excel('sales.xls',usecols=[0,2:4])
# SyntaxError: invalid syntax
# 이런 에러가 뜬다.
# 이런 iloc 기능의 컬럼 긁어오기 방식은 loc의 방식보다 더 한계가 있는것 같다.
## Customizing import with pd.read_excel()
import pandas as pd
pd.read_excel('summer_raw.xls')
'''
Unnamed: 0 City Country Sales Bonus
0 Mike New York USA 25 2.5
1 Jim Boston USA 43 4.3
2 Steven London UK 76 7.6
3 Joe Madrid Spain 12 1.8
4 Tom Paris France 89 13.4
'''
# 드디어 엑셀 파일 중에서도 시트를 골라서 여는 기능을 배운다.
# 첫번째 시트 여는 방법 1
pd.read_excel('summer_raw.xls', sheet_name = 0)
'''
Unnamed: 0 City Country Sales Bonus
0 Mike New York USA 25 2.5
1 Jim Boston USA 43 4.3
2 Steven London UK 76 7.6
3 Joe Madrid Spain 12 1.8
4 Tom Paris France 89 13.4
'''
# 첫번째 시트 여는 방법 2
pd.read_excel('summer_raw.xls', sheet_name='sales')
'''
Unnamed: 0 City Country Sales Bonus
0 Mike New York USA 25 2.5
1 Jim Boston USA 43 4.3
2 Steven London UK 76 7.6
3 Joe Madrid Spain 12 1.8
4 Tom Paris France 89 13.4
'''
# 첫번째 시트 이름이 'sales' 였다.
# 처음 행, 컬럼을 기준으로 모두 공백이 있는 상태에서 자료를 가져오기 1
pd.read_excel('summer_raw.xls', sheet_name=1).head()
'''
Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9 Unnamed: 10 Unnamed: 11
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN Year City Sport Discipline Athlete Name Country Gender Event Medal
2 NaN NaN 0.0 1896 Athens Aquatics Swimming HAJOS, Alfred HUN Men 100M Freestyle Gold Medal
3 NaN NaN 1.0 1896 Athens Aquatics Swimming HERSCHMANN, Otto AUT Men 100M Freestyle Silver
4 NaN NaN 2.0 1896 Athens Aquatics Swimming DRIVAS, Dimitrios GRE Men 100M Freestyle For Sailors Bronze
'''
# 처음 행, 컬럼을 기준으로 모두 공백이 있는 상태에서 자료를 가져오기 2
# 처음으로 임포트해서 가져왔을때 최소한에 1번컬럼까지는 NaN값, 0번 행까지는 NaN값이 가득 차있었다.
pd.read_excel('summer_raw.xls', sheet_name= 1, usecols= 1)
# ValueError: Passing an integer for `usecols` is no longer supported. Please pass in a list of int from 0 to `usecols` inclusive instead.
# 배운대로 하면 될것같았는데 안되네;
# 시도 1
# 나는 usecols로 접근했지만, 우선은 skiprows로 알려주시더라
# usecols에서 C: 처럼 완전 끝까지 슬라이싱 하는건 안먹지만, 엑셀파일을 확인해봤을때 마지막 컬럼의 이름을 알면 슬라이싱이 가능하다.
# index_col = 0 은 처음에 파일생성시 index = False라고 안되어있을경우에 다시한번 rangeindex가 활성화 되어서 나타나기 때문에
# 그것을 방지해주기 위해서 사용하는 것이다.
pd.read_excel('summer_raw.xls', sheet_name=1, skiprows= 2, usecols='C:L', index_col=0)
'''
Year City Sport Discipline Athlete Name Country Gender Event Medal
0 1896 Athens Aquatics Swimming HAJOS, Alfred HUN Men 100M Freestyle Gold Medal
1 1896 Athens Aquatics Swimming HERSCHMANN, Otto AUT Men 100M Freestyle Silver
2 1896 Athens Aquatics Swimming DRIVAS, Dimitrios GRE Men 100M Freestyle For Sailors Bronze
3 1896 Athens Aquatics Swimming Malokinis, Ioannis GRE Men 100M Freestyle For Sailors Gold Medal
4 1896 Athens Aquatics Swimming Chasapis, Spiridon GRE Men 100M Freestyle For Sailors Silver
... ... ... ... ... ... ... ... ... ...
31165 2012 London Wrestling Wrestling Freestyle JANIKOWSKI, Damian POL Men Wg 84 KG Bronze
31166 2012 London Wrestling Wrestling Freestyle REZAEI, Ghasem Gholamreza IRI Men Wg 96 KG Gold
31167 2012 London Wrestling Wrestling Freestyle TOTROV, Rustam RUS Men Wg 96 KG Silver
31168 2012 London Wrestling Wrestling Freestyle ALEKSANYAN, Artur ARM Men Wg 96 KG Bronze
31169 2012 London Wrestling Wrestling Freestyle LIDBERG, Jimmy SWE Men Wg 96 KG Bronze
31170 rows × 9 columns
'''
# 얼추 불러와진것같다.
summer = pd.read_excel('summer_raw.xls', sheet_name=1, skiprows=2, usecols='C:L', index_col=0)
summer.tail()
'''
Year City Sport Discipline Athlete Name Country Gender Event Medal
31165 2012 London Wrestling Wrestling Freestyle JANIKOWSKI, Damian POL Men Wg 84 KG Bronze
31166 2012 London Wrestling Wrestling Freestyle REZAEI, Ghasem Gholamreza IRI Men Wg 96 KG Gold
31167 2012 London Wrestling Wrestling Freestyle TOTROV, Rustam RUS Men Wg 96 KG Silver
31168 2012 London Wrestling Wrestling Freestyle ALEKSANYAN, Artur ARM Men Wg 96 KG Bronze
31169 2012 London Wrestling Wrestling Freestyle LIDBERG, Jimmy SWE Men Wg 96 KG Bronze
'''
summer.info()
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 31170 entries, 0 to 31169
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Year 31170 non-null int64
1 City 31170 non-null object
2 Sport 31170 non-null object
3 Discipline 31170 non-null object
4 Athlete Name 31170 non-null object
5 Country 31166 non-null object
6 Gender 31170 non-null object
7 Event 31170 non-null object
8 Medal 31170 non-null object
dtypes: int64(1), object(8)
memory usage: 2.4+ MB
'''
# 결측값은 없는 것으로 보인다.
# 가공해준 엑셀을 csv 파일로 전환하기
summer.to_csv('summer_imp.csv', index = False)
# 가공해준 엑셀을 다시 엑셀파일로 저장하기
summer.to_excel('summer_imp.xls', index = False)
300x250
'개발일지 > Pandas' 카테고리의 다른 글
pandas 판다스 기초 15 Importing Data From Web Site (0) | 2022.07.28 |
---|---|
Pandas importerror: lxml not found, please install it (0) | 2022.07.28 |
pandas 판다스 기초 13 import CSV file (0) | 2022.07.26 |
pandas 틀린부분 복기 6 matplotlib (0) | 2022.07.26 |
pandas 판다스 기초 12 Matplotlib (0) | 2022.07.26 |