#코드잇 데이터 사이언스 강의 듣는 중
이거 또 왜이러냐 ..
하..
갑자기 파일의 저장 경로를 못 찾겠다고 하면 그 위에 것까지 넣어보고,
그냥.. 상위 폴더를 의미하는 '../ '를 추가하면 됨..
근데 이것도 될 때가 있고 안 될 때가 있는데 나도.. 모르겠음.. 🤷♀️🤦♀️
컴퓨터는 왜 깔끔한 거 같으면서도 가끔 인간같이 지멋대로임...
import pandas as pd
iphone_df = pd.read_csv('../data/iphone.csv', index_col = 0)
iphone_df
기본적으로 .loc['로', '벡터' ]를 지정하면 해당 값을 가져 올 수 있음.
로 전체를 가져오고 싶다면 벡터 위치에 : 를 넣으면 됨.
벡터도 마찬가지임.
간략하게 쓰는 법은 로랑 벡터가 조금 다름.
로는 .loc['로']
벡터는 ['벡터']
iphone_df.loc['iPhone 8', '메모리']
iphone_df.loc['iPhone X', :]
#iphone_df.loc['iPhone X'] 위랑 같음
type(iphone_df.loc['iPhone X'])
#pandas.core.series.Series
iphone_df.loc[:,'출시일']
#iphone_df['출시일']
type(iphone_df['출시일'])
#pandas.core.series.Series
- 타입은 모두 시리즈임. 한 로 or 벡터를 뽑은 것이기 때문에 일차원이니까.
- 여러 개를 가지고 오려면, []를 한 번 더 해주면 됨
#1개
df[column]
#여러 개
df[[column1, column2]]
#df[['SBS','JTBC']]
- 다른 df에서 필요한 벡터만 가지고 와서 df 만들기
import pandas as pd
samsong_df = pd.read_csv('data/samsong.csv')
hyundee_df = pd.read_csv('data/hyundee.csv')
day = samsong_df['요일']
samsong = samsong_df['문화생활비']
hyundee = hyundee_df['문화생활비']
culture_fee = {
'day' : day,
'samsong' : samsong,
'hyundee' : hyundee
}
culture_fee_df = pd.DataFrame(culture_fee)
culture_fee_df
# 더 간단하게 하면 이렇게 합쳐서 바로 쓸 수 있음.
# combined_df = pd.DataFrame({
# 'day': samsong_df['요일'],
# 'samsong': samsong_df['문화생활비'],
# 'hyundee': hyundee_df['문화생활비']
# })
# combined_df
- 여러 행, 열 가져 올 때
#행
iphone_df.loc[['iPhone X','iPhone 8']]
#열
iphone_df[['Face ID', '출시일', '메모리']]
- 슬라이싱도 기본적으로 비슷함.
- 다만 인덱싱이랑 반대로 이번에는 벡터가 다소 복잡함.
(그렇다기 보단, 로를 반드시 표기해야 함. )
- 로 --> .loc['':'']
- 벡터 --> .loc[:, '': '']
#로
iphone_df.loc['iPhone 8':'iPhone XS']
iphone_df.loc[:'iPhone XS']
#벡터
iphone_df.loc[:,'메모리':'Face ID']
iphone_df.loc['iPhone 7':'iPhone X','메모리':'Face ID']
- 넘파이처럼 불린 값으로도 필터링이 가능함.
- 둘 다 길이를 맞춰서 넣어줘야함.
예. 이 7개니깐 7개, 열은 5개라 5개.
#행
iphone_df.loc[[True, False, True, True, False, True, False]]
#열
iphone_df.loc[:, [True, False, True, True, False]]
but, 이런 식으로 불린 값을 일일히 확인하지 않고, 1) 대개 조건식으로 확인함.
- 넘파이랑 같음 --> True 인 값들만 나타남.
- 동시에 여러 조건 충족은 () & | () --> 괄호 사이에 연산식을 넣어 주면 됨.
iphone_df.loc[iphone_df['디스플레이'] > 5]
iphone_df.loc[iphone_df['Face ID'] == 'Yes']
#동시에 만족하려면 () & ()
#너무 기니깐 변수에 입력해줌
condition = (iphone_df['디스플레이'] > 5) & (iphone_df['Face ID'] == 'Yes')
iphone_df[condition]
++ 튜플이랑 리스트랑 섞어서 사용하는데..
- 여전히 명확하게는 모르겠으나, []로 바꿨을 때는 unsupported operand typeError가 떠서 아마도 수식이 변화하지 않는 것이니 상수처리로 보는 것이 아닐가 생각한다.
- 튜플과 리스트의 가장 큰 차이점은 가변성이고 튜플은 불변이고, 그렇기 때문에 가볍고 성능이 빠르기 때문으로 여겨짐.
- 2) 조건 식이 들어간 벡터만 가지고 올 때 주의할 것.
- 그냥 df[condition]으로만 하다가 KBS 만 뜨는 게 아니라 해당 로가 다 떠서.. 뭐지 하면서 고민했음.
- row는 컨디션 중에서, 벡터는 'KBS'만 ==> 쪼개 서 생각할 것.
import pandas as pd
# 데이터 불러오기
df = pd.read_csv('data/broadcast.csv', index_col=0)
# 조건 설정
condition = df['KBS'] > 30
# 조건에 맞는 벡터 반환
df.loc[condition, 'KBS']
#벡터 여러 개인 경우 응용
df = pd.read_csv('data/broadcast.csv', index_col=0)
condition = df['SBS'] < df['TV CHOSUN']
df.loc[condition, ['SBS', 'TV CHOSUN']]
+++ 3) 조건을 부여해서 새로운 벡터로 불린 값을 넣어주는 것.
위의 1) 값 자체를 바꿔주는 것이고, 2) 이미 있는 열에서 codition에 해당하는 값을 가져오는 것.
- condition 자체를 부여하는 것이지 df[condition]이 아님
import pandas as pd
df = pd.read_csv('data/toeic.csv')
condition = (df['LC'] >= 250) & (df['RC'] >= 250) & ((df['LC'] + df['RC']) >= 600)
df['합격 여부'] = condition
#쪼개면 가독성은 더 올라감.
#pass_total = df['LC'] + df['RC'] >= 600
#pass_both = (df['LC'] >= 250) & (df['RC'] >= 250)
#df['합격 여부'] = pass_total & pass_both
df
4) 응용해서 여러 값 수정 예시
- 값을 들여다 보면서 공통 특징을 찾아낼 것 . 최대한 쉬운 방향으로 고민할 것.
- 특히 슬라이싱이 복잡해 보여도 단계별로 하면 되니깐.
- 컨디션을 잘 고민해 볼 것.
import pandas as pd
df = pd.read_csv('data/Puzzle_before.csv')
df['A'] = df['A'] *2
# df.loc[:, 'B':'E'] = (df.loc[:, 'B':'E'] >= 80).astype(int)
df[df.loc[:, 'B':'E'] < 80] = 0
df[df.loc[:, 'B':'E'] >= 80] = 1
df.iloc[2, 5] = 99
# df.loc[2, 'F'] = 99
df
- pandas도 numpy처럼 인덱스 번호로 불러올 수 있음.
- .iloc를 붙여주면 됨 (강사님이 아마 integer location일 것으로 추측하심)
iphone_df.iloc[2,4]
#해당 값들 여러 개 가능
iphone_df.iloc[[1,3],[1,4]]
#슬라이싱도 가능
iphone_df.iloc[3:, 1:4]
'Data Science > Pandas' 카테고리의 다른 글
[Pandas] boolean indexing 불린 인덱싱, 다중 조건 인덱싱 (0) | 2024.05.31 |
---|---|
[Pandas] DataFrame/Series 정보 확인, .describe(), .value_counts() (0) | 2024.05.30 |
[Pandas] DataFrame 값 수정/추가/삭제, header/index 명 지정하기 (0) | 2024.05.28 |
[Pandas] DataFrame indexing 문법 정리 (이름, 위치) (0) | 2024.05.27 |
[Pandas] numpy와 pandas 비교, pd.DataFrame(), header 변경 (0) | 2024.05.20 |