pd.to_datetime(df['date'], format='지정')

 

연,월,일 뽑으려면 year, month, day 속성 이용

 

def fix_century(x):
    import datetime
    
    year = x.year - 100 if x.year >= 2061 else x.year
    return pd.to_datetime(datetime.date(year, x.month, x.day))

df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_century)
Ans = df.head(4)

 

24시를 00:00:00으로 변환하고 일자 추가하기

def change_date(x):
    import datetime
    hour = x.split(':')[1]
    date = x.split(':')[0]
    
    if hour == '24':
        hour = '00:00:00'
        
        FinalDate = pd.to_datetime(date+" "+hour) + datetime.timedelta(days=1)
        
    else:
        hour = hour + ':00:00'
        FinalDate = pd.to_datetime(date+" "+hour)
        
    return FinalDate

df['(년-월-일:시)'] = df['(년-월-일:시)'].apply(change_date)
Ans = df

Ans.head(3)

 

리샘플링 resample

Datetime index를 원하는 주기로 나누어주는 메서드

 

df.set_index(' ', inplace=True, drop=True) 후 df.resample('w').agg(['min', 'max', 'mean', 'std'])

실행하면 데이터를 주 단위로 뽑아서 컬럼별 최소, 최대, 평균, 표준편차를 구할 수 있음

 

 

'Python' 카테고리의 다른 글

Pandas 판다스  (0) 2022.11.05
07 Merge, Concat  (0) 2022.08.13
06 Pivot  (0) 2022.08.13
05 Time_Series  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07

판다스의 핵심 객체 : DataFrame

  • DataFrame이란? 여러 개의 행과 열로 이루어진 2차원 데이터를 담는 데이터 구조체
    • Index : 개별 데이터를 고유하게 식별하는 key 값
    • Series : 칼럼이 하나 뿐인 데이터 구조체

- Series와 DataFrame은 모두 Index를 key값으로 가지고 있음

 

 

Titanic : Machine Learning from Disaster

import pandas as pd

titanic_df = pd.read_csv('titanic_train.csv')
print('titanic 변수 type:', type(titanic_df))
titanic_df
titanic_df.head(3)
print('DataFrame 크기: ', titanic_df.shape)
titanic_df.info()
titanic_df.describe()
  • describe() : 해당 숫자 컬럼이 숫자형 카테고리 컬럼인지 판단할 수 있게 도와줌
value_counts = titanic_df['Pclass'].value_counts()
print(value_counts)
  • value_counts() : 지정된 칼럼의 데이터값 건수를 반환, 데이터의 분포도를 확인하는데 유용
titanic_pclass = titanic_df['Pclass']
print(type(titanic_pclass))
titanic_pclass.head()
value_counts = titanic_df['Pclass'].value_counts()
print(type(value_counts))
print(value_counts)
print('titanic_df 데이터 건수:', titanic_df.shape[0])
print('기본 설정인 dropna = True로 value_counts()')
print(titanic_df['Embarked'].value_counts())
print(titanic_df['Embarked'].value_counts(dropna=False))
titanic_df['Age_0'] = 0
titanic_df.head(3)
titanic_df['Age_by_10'] = titanic_df['Age']*10
titanic_df['Family_No'] = titanic_df['SibSp'] + titanic_df['Parch'] + 1
titanic_df.head(3)

titanic_df['Age_by_10'] = titanic_df['Age_by_10']+100
titanic_df.head(3)
titanic_drop_df = titanic_df.drop('Age_0', axis=1)
titanic_drop_df.head(3)

titanic_df.head(3)

drop_result = titanic_df.drop(['Age_0', 'Age_by_10', 'Family_No'], axis = 1, inplace = True)
print('inplace=True로 drop 후 반환된 값:', drop_result)
titanic_df.head(3)
  • drop()시 inplace=True로 설정하면 반환 값이 None(아무 값도 아님)이 된다, 따라서 inplace=True로 설정한 채로 반환 값을 다시 자신의 DataFrame 객체로 할당하면 안된다.
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 15)
print('#### before axis 0 drop ####')
print(titanic_df.head(3))

titanic_df.drop([0,1,2], axis = 0, inplace = True)

print('#### after axis 0 drop ####')
print(titanic_df.head(3))
titanic_df = pd.read_csv('titanic_train.csv')
indexes = titanic_df.index
print(indexes)

print('Index 객체 array값:\n', indexes.values)
titanic_reset_df = titanic_df.reset_index(inplace = False)
titanic_reset_df.head(3)

print('### before reset_index ###')
value_counts = titanic_df['Pclass'].value_counts()
print(value_counts)
print('value_counts 객체 변수 타입:', type(value_counts))

new_value_counts = value_counts.reset_index(inplace=False)
print('### After reset_index ###')
print(new_value_counts)
print('new_value_counts 객체 변수 타입:', type(new_value_counts))

 

 

 

DataFrame을 넘파이 ndarrary, 리스트, 딕셔너리로 변환하기

#DataFrame을 ndarray로 변환
array3 = df_dict.values
print('df_dict.values 타입:', type(array3), 'df_dict.values.shape:', array.shape)
print(array3)
#DataFrame을 리스트로 변환
list3 = df_dict.values.tolist()
print('df_dict.values.tolist() 타입:', type(list3))
print(list3)
#DataFrame을 딕셔너리로 변환
dict3 = df_dict.to_dict('list')
print('\n df_dict.to_dict() 타입:', type(dict3))
print(dict3)

 

 

데이터 셀렉션 및 필터링

print(titanic_df['Pclass'].head(3))
print(titanic_df[['Survived', 'Pclass']].head(3))
print(titanic_df[0])

titanic_df[0:2]

#불린 인덱싱 표현
titanic_df[titanic_df['Pclass']== 3].head(3)

 

  • DataFrame iloc[] 연산자
data = {'Name' : ['Chulmin', 'Eunkyung', 'Jinwoong', 'Soobeom'],
       'Year' : [2011, 2016, 2015, 2015],
       'Gender' : ['Male', 'Female', 'Male', 'Male']
       }

data_df = pd.DataFrame(data, index = ['one', 'two', 'three', 'four'])
data_df
data_df.iloc[0,0]

print('\n 맨 마지막 칼럼 데이터 [:, -1]\n', data_df.iloc[:,-1])
print('\n 맨 마지막 칼럼을 제외한 모든 데이터 [:, :-1]\n', data_df.iloc[:, :-1])

머신러닝 학습 데이터의 맨 마지막 칼럼이 타겟 값인 경우가 많음

iloc[:, -1]을 하면 맨 마지막 칼럼의 값인 타겟 값만 가져오고, iloc[:, :-1]을 하게 되면 처음부터 맨 마지막 칼럼을 제외한 모든 칼럼의 값인 피처값들을 가져올 수 있게 된다

iloc[]은 슬라이싱과 팬시 인덱싱은 제공하나 명확한 위치 기반 인덱싱이 사용되어야 하는 제약으로 인해 불린 인덱싱은 제공하지 않는다

 

  • DataFrame loc[] 연산자

loc[]은 명칭 기반 인덱싱으로 슬라이싱 기호 ':'를 적용할 때 유의해야함

iloc[]와 다르게 loc[]은 불린 인덱싱이 가능

data_df.loc[data_df.Year >= 2014]

loc[]은 행 위치에 DataFrame 인덱스가 오며, 열 위치에는 칼럼명을 지정해 원하는 데이터를 반환

 

  • 불린 인덱싱

iloc이나 loc과 같이 명확하게 인덱싱을 지정하는 방식보다는 불린 인덱싱에 의존해 데이터를 가져오는 경우가 더 많다

titanic_df = pd.read_csv('titanic_train.csv')
titanic_boolean = titanic_df[titanic_df['Age'] > 60]
print(titanic_boolean)
titanic_boolean
titanic_df[titanic_df['Age']>60][['Name', 'Age']].head(3)
titanic_df.loc[titanic_df['Age']>60, ['Name', 'Age']].head(3)
titanic_df[(titanic_df['Age']>60) & (titanic_df['Pclass']==1) &
          (titanic_df['Sex']=='female')]

- and 조건일 때는 &

- or 조건일 때는 |

- Not 조건일 때는 ~

 

 

정렬, Aggregation 함수, GroupBy 적용

titanic_sorted = titanic_df.sort_values(by=['Name'])
titanic_sorted.head(3)

titanic_sorted = titanic_df.sort_values(by=['Pclass', 'Name'], ascending = False)
titanic_sorted.head(3)
titanic_df.count()

titanic_df[['Age', 'Fare']].mean()

titanic_groupby = titanic_df.groupby(by='Pclass')
print(type(titanic_groupby))

titanic_groupby = titanic_df.groupby('Pclass').count()
titanic_groupby
titanic_df = pd.read_csv('titanic_train.csv')
titanic_groupby = titanic_df.groupby('Pclass')[['PassengerId','Survived']].count()
titanic_groupby

titanic_df.groupby('Pclass')['Age'].agg([max,min])
agg_format = {'Age':'max', 'SibSp':'sum', 'Fare':'mean'}
titanic_df.groupby('Pclass').agg(agg_format)

- groupby()는 agg() 내에 입력값으로 딕셔너리 형태로 aggregation이 적용될 칼럼들과 aggregation 함수를 입력

 

 

결손 데이터 처리하기

titanic_df.isna().head(3)
titanic_df.isna().sum()
titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
titanic_df.head(3)
titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())
titanic_df['Embarked'] = titanic_df['Embarked'].fillna('S')
titanic_df.isna().sum()

 

 

apply lambda 식으로 데이터 가공

판다스는 apply 함수에 lambda식을 결합해 DataFrame이나 Series의 레코드별로 데이터를 가공하는 기능 제공

lambda식은 파이썬에서 함수형 프로그래밍을 지원하기 위해 만들어짐

def get_square(a):
    return a**2

print('3의 제곱은:', get_square(3))

함수명과 입력 인자를 먼저 선언하고 이후 함수 내에서 입력 인자를 가공한 뒤 결과값을 return 문법으로 반환해야함

lambda는 이러한 함수의 선언과 함수 내의 처리를 한 줄의 식으로 쉽게 변환

lambda_square = lambda x : x**2
print('3의 제곱은:', lambda_square(3))

여러 개의 값을 입력 인자로 사용해야 하면 map()함수를 결합하여 사용

a = [1,2,3]
squares = map(lambda x : x**2, a)
list(squares)

 

titanic_df = pd.read_csv('titanic_train.csv')
titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x : len(x))
titanic_df[['Name', 'Name_len']].head(3)
titanic_df['Child_Adult'] = titanic_df['Age'].apply(lambda x : 'Child' if x <= 15 else 'Adult')
titanic_df[['Age', 'Child_Adult']].head(8)
titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : 'Child' if x<= 15 else ('Adult' if x<= 60 else 'Elderly'))
titanic_df['Age_cat'].value_counts()
def get_category(age):
    cat = ''
    if age <= 5:
        cat = 'Baby'
    elif age <= 12:
        cat = 'Child'
    elif age <= 18:
        cat = 'Teenager'
    elif age <= 25:
        cat = 'Student'
    elif age <= 35:
        cat = 'Young Adult'
    elif age <= 60:
        cat = 'Adult'
    else:
        cat = 'Elderly'
        
    return cat
    
titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : get_category(x))
titanic_df[['Age', 'Age_cat']].head()

 

 

 

'Python' 카테고리의 다른 글

datetime  (0) 2022.12.26
07 Merge, Concat  (0) 2022.08.13
06 Pivot  (0) 2022.08.13
05 Time_Series  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07

 

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html#time-series

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 91

df1과 df2 데이터를 하나의 데이터 프레임으로 합쳐라

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/mergeTEst.csv',index_col= 0)
df

 

 

df1 = df.iloc[:4,:]
df2 = df.iloc[4:,:]

display(df1)
display(df2)

 

 

total = pd.concat([df1,df2])
Ans = total
Ans

 

 

 

df3 = df.iloc[:2,:4]
df4 = df.iloc[5:,3:]

display(df3)
display(df4)

 

 

 

Question 92

df3과 df4 데이터를 하나의 데이터 프레임으로 합쳐라. 둘다 포함하고 있는 년도에 대해서만 고려한다

#둘 다 포함하고 있는 년도에 대해서만 고려

Ans = pd.concat([df3,df4],join='inner')
Ans

 

 

Question 93

df3과 df4 데이터를 하나의 데이터 프레임으로 합쳐라. 모든 컬럼을 포함하고, 결측치는 0으로 대체한다

Ans = pd.concat([df3,df4],join='outer').fillna(0)
Ans

 

df5 = df.T.iloc[:7,:3]
df6 = df.T.iloc[6:,2:5]

display(df5)
display(df6)

 

 

 

Question 94

df5과 df6 데이터를 하나의 데이터 프레임으로 merge함수를 이용하여 합쳐라.

Algeria컬럼을 key로 하고 두 데이터 모두 포함하는 데이터만 출력하라

Ans = pd.merge(df5,df6,on='Algeria',how='inner')
Ans

 

 

Question 95

df5과 df6 데이터를 하나의 데이터 프레임으로 merge함수를 이용하여 합쳐라.

Algeria컬럼을 key로 하고 합집합으로 합쳐라

Ans =pd.merge(df5,df6,on='Algeria',how='outer')
Ans

 

 

 

 

'Python' 카테고리의 다른 글

datetime  (0) 2022.12.26
Pandas 판다스  (0) 2022.11.05
06 Pivot  (0) 2022.08.13
05 Time_Series  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07

 

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html#time-series

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 83

Indicator을 삭제하고 First Tooltip 컬럼에서 신뢰구간에 해당하는 표현을 지워라

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/under5MortalityRate.csv')
df

 

df.drop('Indicator',axis=1,inplace=True)

df['First Tooltip'] = df['First Tooltip'].map(lambda x: float(x.split("[")[0]))
Ans = df
Ans.head(4)

 

 

 

Question 84

년도가 2015년 이상, Dim1이 Both sexes인 케이스만 추출하라

target = df[(df.Period >=2015) & (df.Dim1 =='Both sexes')]
Ans = target
Ans.head(3)

 

 

 

Question 85

84번 문제에서 추출한 데이터로 아래와 같이 나라에 따른 년도별 사망률을 데이터 프레임화 하라

Ans = target.pivot(index='Location',columns='Period',values='First Tooltip')
Ans.head(3)

 

 

 

Question 86

Dim1에 따른 년도별 사망비율의 평균을 구하라

Ans = df.pivot_table(index='Dim1',columns='Period',values='First Tooltip',aggfunc='mean')
Ans.iloc[:,:4]

df.pivot_table(index='', columns='', values='', aggfunc='')

.pivot_table()함수는 .pivot()메소드와 유사하게 동작하지만 aggfunc라는 옵션을 통해 데이터의 통계량을 바로 계산할 수 있다는 점이 차이점

 

 

 

Question 87

데이터에서 한국 KOR 데이터만 추출하라

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/winter.csv')
df

 

 

kr = df[df.Country=='KOR']
Ans = kr
Ans.head(4)

 

 

 

Question 88

한국 올림픽 메달리스트 데이터에서 년도에 따른 medal 갯수를 데이터프레임화 하라

Ans = kr.pivot_table(index='Year',columns='Medal',aggfunc='size').fillna(0)
Ans

 

 

 

Question 89

전체 데이터에서 sport종류에 따른 성별수를 구하여라

Ans = df.pivot_table(index='Sport',columns='Gender',aggfunc='size')
Ans

 

 

 

Question 90

전체 데이터에서 Discipline종류에 따른 따른 Medal수를 구하여라

Ans = df.pivot_table(index='Discipline',columns='Medal',aggfunc='size')
Ans

 

 

 

 

'Python' 카테고리의 다른 글

Pandas 판다스  (0) 2022.11.05
07 Merge, Concat  (0) 2022.08.13
05 Time_Series  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07
03 Grouping  (0) 2022.08.07

 

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html#grouping

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 64

데이터를 로드하고 각 열의 데이터 타입을 파악하라

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/timeTest.csv')
df.info()

 

Question 65

Yr_Mo_Dy을 판다스에서 인식할 수 있는 datetime64타입으로 변경하라

df.Yr_Mo_Dy = pd.to_datetime(df.Yr_Mo_Dy)
Ans = df.Yr_Mo_Dy

Ans.head(4)

pd.to_datetime()

판다스에서 인식할 수 있는 datetime64타입으로 변경

 

 

Question 66

Yr_Mo_Dy에 존재하는 년도의 유일값을 모두 출력하라

Ans = df.Yr_Mo_Dy.dt.year.unique()
Ans

 

Question 67

Yr_Mo_Dy에 년도가 2061년 이상의 경우에는 모두 잘못된 데이터이다.

해당경우의 값은 100을 빼서 새롭게 날짜를 Yr_Mo_Dy 컬럼에 정의하라

def fix_century(x):
    import datetime
    
    year = x.year - 100 if x.year > 1989 else x.year
    return pd.to_datetime(datetime.date(year, x.month, x.day))


df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_century)

Ans = df.head(4)
Ans

 

 

 

Question 68

년도별 각컬럼의 평균값을 구하여라

Ans = df.groupby(df.Yr_Mo_Dy.dt.year).mean()
Ans.head(4)

 

 

 

Question 69

weekday컬럼을 만들고 요일별로 매핑하라 ( 월요일: 0 ~ 일요일 :6)

df['weekday'] = df.Yr_Mo_Dy.dt.weekday
Ans = df['weekday'].head(3).to_frame()
Ans

dt.weekday; 월요일이 0, 일요일이 6

 

 

 

Question70

weekday컬럼을 기준으로 주말이면 1 평일이면 0의 값을 가지는 WeekCheck 컬럼을 만들어라

df['WeekCheck']  = df['weekday'].map(lambda x : 1 if x in [5,6] else 0)
Ans = df['WeekCheck'].head(3).to_frame()
Ans

 

 

Question71

년도, 일자 상관없이 모든 컬럼의 각 달의 평균을 구하여라

Ans = df.groupby(df.Yr_Mo_Dy.dt.month).mean()
Ans.head(4)

 

 

 

Question72

모든 결측치는 컬럼기준 직전의 값으로 대체하고 첫번째 행에 결측치가 있을경우 뒤에있는 값으로 대채하라

df = df.fillna(method='ffill').fillna(method='bfill')
df.isnull().sum()

 

 

 

Question73

년도 - 월을 기준으로 모든 컬럼의 평균값을 구하여라

Ans = df.groupby(df.Yr_Mo_Dy.dt.to_period('M')).mean()
Ans.head(3)

 

 

Question74

RPT 컬럼의 값을 일자별 기준으로 1차차분하라

Ans = df['RPT'].diff()
Ans.head(3)

 

 

Question75

RPT와 VAL의 컬럼을 일주일 간격으로 각각 이동평균한값을 구하여라

Ans= df[['RPT','VAL']].rolling(7).mean()
Ans.head(9)

 

 

 

Question76

df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/seoul_pm.csv')
df

년-월-일:시 컬럼을 pandas에서 인식할 수 있는 datetime 형태로 변경하라.

서울시의 제공데이터의 경우 0시가 24시로 표현된다

def change_date(x):
    import datetime
    hour = x.split(':')[1]
    date = x.split(":")[0]
    
    if hour =='24':
        hour ='00:00:00'
        
        FinalDate = pd.to_datetime(date +" "+hour) +datetime.timedelta(days=1)
        
    else:
        hour = hour +':00:00'
        FinalDate = pd.to_datetime(date +" "+hour)
    
    return FinalDate

df['(년-월-일:시)'] = df['(년-월-일:시)'].apply(change_date)

Ans = df
Ans.head(3)

 

 

 

Question77

일자별 영어요일 이름을 dayName 컬럼에 저장하라

df['dayName']  =df['(년-월-일:시)'].dt.day_name()
Ans =df['dayName'] 
Ans.head(5)

dt.day_name()

일자별 영어 요일

 

 

 

 

Question78

일자별 각 PM10등급의 빈도수를 파악하라

Ans1 = df.groupby(['dayName','PM10등급'],as_index=False).size()
Ans2 = Ans1.pivot(index='dayName',columns='PM10등급',values='size').fillna(0)
Ans1.head()

 

Ans2

 

 

Question79

시간이 연속적으로 존재하며 결측치가 없는지 확인하라

# 시간을 차분했을 경우 첫 값은 nan, 이후 모든 차분값이 동일하면 연속이라 판단한다.
check = len(df['(년-월-일:시)'].diff().unique())
if check ==2:
    Ans =True
else:
    Ans = False
    
Ans

 

 

Question80

오전 10시와 오후 10시(22시)의 PM10의 평균값을 각각 구하여라

Ans = df.groupby(df['(년-월-일:시)'].dt.hour).mean().iloc[[10,22],[0]]
Ans

 

 

Question81

날짜 컬럼을 index로 만들어라

df.set_index('(년-월-일:시)',inplace=True,drop=True)
Ans =df
Ans.head(3)

 

 

 

Question82

데이터를 주단위로 뽑아서 최소,최대 평균, 표준표차를 구하여라

Ans = df.resample('W').agg(['min','max','mean','std'])
Ans.head(5)

 

 

 

 

'Python' 카테고리의 다른 글

07 Merge, Concat  (0) 2022.08.13
06 Pivot  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07
03 Grouping  (0) 2022.08.07
02 Filtering & Sorting  (0) 2022.08.07

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 56

데이터를 로드하고 데이터 행과 열의 갯수를 출력하라

df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/BankChurnersUp.csv',index_col=0)
Ans =df.shape
Ans

 

 

Question 57

Income_Category의 카테고리를 map 함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하라

dic = {
    'Unknown'        : 'N',
    'Less than $40K' : 'a',
    '$40K - $60K'    : 'b',
    '$60K - $80K'    : 'c',
    '$80K - $120K'   : 'd',
    '$120K +'        : 'e'   
}

df['newIncome'] = df.Income_Category.map(lambda x: dic[x])

Ans = df['newIncome']
Ans.head(4)

dictionary가 주어졌을 때, .map(lamda x : dic[x])

 

 

 

Question 58

Income_Category의 카테고리를 apply 함수를 이용하여 다음과 같이 변경하여 newIncome 컬럼에 매핑하라

def changeCategory(x):
    if x =='Unknown':
        return 'N'
    elif x =='Less than $40K':
        return 'a'
    elif x =='$40K - $60K':   
        return 'b'
    elif x =='$60K - $80K':    
        return 'c'
    elif x =='$80K - $120K':   
        return 'd'
    elif x =='$120K +' :     
        return 'e'

df['newIncome']  =df.Income_Category.apply(changeCategory)

Ans = df['newIncome']
Ans.head(4)

함수가 주어졌을 때, apply(func)

 

 

 

Question 59

Customer_Age의 값을 이용하여 나이 구간을 AgeState 컬럼으로 정의하라.

(0~9 : 0 , 10~19 :10 , 20~29 :20 … 각 구간의 빈도수를 출력하라)

df['AgeState']  = df.Customer_Age.map(lambda x: x//10 *10)

Ans = df['AgeState'].value_counts().sort_index()
Ans

 

Question 60

Education_Level의 값중 Graduate단어가 포함되는 값은 1 그렇지 않은 경우에는 0으로 변경하여 newEduLevel 컬럼을 정의하고 빈도수를 출력하라

df['newEduLevel'] = df.Education_Level.map(lambda x : 1 if 'Graduate' in x else 0)
Ans = df['newEduLevel'].value_counts()
Ans

 

 

Question 61

Credit_Limit 컬럼값이 4500 이상인 경우 1 그외의 경우에는 모두 0으로 하는 newLimit 정의하라.

newLimit 각 값들의 빈도수를 출력하라

df['newLimit'] = df.Credit_Limit.map(lambda x : 1 if x>=4500 else 0)
Ans = df['newLimit'].value_counts()
Ans

 

 

Question 62

Marital_Status 컬럼값이 Married 이고 Card_Category 컬럼의 값이 Platinum인 경우 1 그외의 경우에는 모두 0으로 하는 newState컬럼을 정의하라.

newState의 각 값들의 빈도수를 출력하라

def check(x):
    if x.Marital_Status =='Married' and x.Card_Category =='Platinum':
        return 1
    else:
        return 0


df['newState'] = df.apply(check,axis=1)

Ans  = df['newState'].value_counts()
Ans

 

 

Question 63

Gender 컬럼값 M인 경우 male F인 경우 female로 값을 변경하여 Gender 컬럼에 새롭게 정의하라.

각 value의 빈도를 출력하라

def changeGender(x):
    if x =='M':
        return 'male'
    else:
        return 'female'
df['Gender'] = df.Gender.apply(changeGender)
Ans = df['Gender'].value_counts()

Ans

 

 

 

 

 

'Python' 카테고리의 다른 글

06 Pivot  (0) 2022.08.13
05 Time_Series  (0) 2022.08.13
03 Grouping  (0) 2022.08.07
02 Filtering & Sorting  (0) 2022.08.07
01 Getting & Knowing Data  (0) 2022.08.07

https://www.datamanim.com/dataset/99_pandas/pandasMain.html

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 44

데이터를 로드하고 상위 5개 컬럼을 출력하라

df= pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/AB_NYC_2019.csv')
Ans =df.head(5)
Ans

 

 

Question 45

데이터의 각 host_name의 빈도수를 구하고 host_name으로 정렬하여 상위 5개를 출력하라

Ans = df.groupby('host_name').size()
Ans.head(5)

 

Ans = df.host_name.value_counts().sort_index()
Ans.head(5)

 

df.groupby('').size()

df.특정변수.value_counts().sort_index()

 

 

 

Question 46

데이터의 각 host_name의 빈도수를 구하고 빈도수 기준 내림차순 정렬한 데이터 프레임을 만들어라.

빈도수 컬럼은 counts로 명명하라

Ans = df.groupby('host_name').size().\
                to_frame().rename(columns={0:'counts'}).\
                sort_values('counts',ascending=False)
                
Ans.head(5)

 

 

Question 47

neighbourhood_group의 값에 따른 neighbourhood컬럼 값의 갯수를 구하여라

Ans = df.groupby(['neighbourhood_group','neighbourhood'], as_index=False).size()
Ans.head(4)

 

 

Question 48

neighbourhood_group의 값에 따른 neighbourhood컬럼 값 중 neighbourhood_group그룹의 최댓값들을 출력하라

Ans= df.groupby(['neighbourhood_group','neighbourhood'], as_index=False).size()\
                  .groupby(['neighbourhood_group'], as_index=False).max()
                  
Ans

 

 

 

Question 49

neighbourhood_group 값에 따른 price값의 평균, 분산, 최대, 최소 값을 구하여라

Ans = df[['neighbourhood_group','price']].groupby('neighbourhood_group').agg(['mean','var','max','min'])
Ans

groupby('').agg(['mean', 'var', 'max', 'min])

 

 

 

Question 50

neighbourhood_group 값에 따른 reviews_per_month 평균, 분산, 최대, 최소 값을 구하여라

Ans = df[['neighbourhood_group','reviews_per_month']].groupby('neighbourhood_group').agg(['mean','var','max','min'])
Ans

 

 

 

Question 51

neighbourhood 값과 neighbourhood_group 값에 따른 price 의 평균을 구하라

Ans = df.groupby(['neighbourhood','neighbourhood_group']).price.mean()
Ans

 

 

 

Question 52

neighbourhood 값과 neighbourhood_group 값에 따른 price 의 평균을 계층적 indexing 없이 구하라

Ans = df.groupby(['neighbourhood','neighbourhood_group']).price.mean().unstack()
Ans

.unstack() : 계층적 indexing 없이 구하기

index에 있던 값을 column으로 올려준다

 

 

 

 

Question 53

neighbourhood 값과 neighbourhood_group 값에 따른 price 의 평균을 계층적 indexing 없이 구하고 nan 값은 -999값으로 채워라

Ans = df.groupby(['neighbourhood','neighbourhood_group']).price.mean().unstack().fillna(-999)
Ans.head(4)

 

 

 

Question 54

데이터중 neighbourhood_group 값이 Queens값을 가지는 데이터들 중 neighbourhood 그룹별로 price값의 평균, 분산, 최대, 최소값을 구하라

Ans = df[df.neighbourhood_group=='Queens'].groupby(['neighbourhood']).price.agg(['mean','var','max','min'])
Ans.head(4)

 

 

 

Question 55

데이터중 neighbourhood_group 값에 따른 room_type 컬럼의 숫자를 구하고 neighbourhood_group 값을 기준으로 각 값의 비율을 구하여라

Ans = df[['neighbourhood_group','room_type']].groupby(['neighbourhood_group','room_type']).size().unstack()
Ans.loc[:,:] = (Ans.values /Ans.sum(axis=1).values.reshape(-1,1))
Ans

 

 

 

 

 

'Python' 카테고리의 다른 글

05 Time_Series  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07
02 Filtering & Sorting  (0) 2022.08.07
01 Getting & Knowing Data  (0) 2022.08.07
for문 동적변수 생성  (0) 2022.08.07

 

https://www.datamanim.com/dataset/99_pandas/pandasMain.html

 

판다스 연습 튜토리얼 — DataManim

Question 43 df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라 lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

www.datamanim.com

 

 

Question 20

데이터를 로드하라.

DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv'
df = pd.read_csv(DataUrl)
Ans = type(df)
Ans

 

 

Question 21

quantity컬럼 값이 3인 데이터를 추출하여 첫 5행을 출력하라

Ans = df.loc[df['quantity']==3].head()
Ans

 

 

Question 22

quantity컬럼 값이 3인 데이터를 추출하여 index를 0부터 정렬하고 첫 5행을 출력하라

Ans = df.loc[df['quantity']==3].head().reset_index(drop=True)
Ans

df.reset_index(drop=True)

 

 

Question 23

quantity , item_price 두개의 컬럼으로 구성된 새로운 데이터 프레임을 정의하라

Ans =df[['quantity','item_price']]
Ans

 

 

Question 24

item_price 컬럼의 달러표시 문자를 제거하고 float 타입으로 저장하여 new_price 컬럼에 저장하라

df['new_price'] = df['item_price'].str[1:].astype('float')
Ans = df['new_price'].head()
Ans

df[''].str[1:].astype('float')

 

 

 

Question 25

new_price 컬럼이 5이하의 값을 가지는 데이터프레임을 추출하고, 전체 갯수를 구하여라

Ans = len(df.loc[df.new_price <=5])
Ans

 

Question 26

item_name명이 Chicken Salad Bowl 인 데이터 프레임을 추출하라고 index 값을 초기화 하여라

Ans = df.loc[df.item_name =='Chicken Salad Bowl'].reset_index(drop=True)
Ans.head(3)

 

 

Question 27

new_price값이 9 이하이고 item_name 값이 Chicken Salad Bowl 인 데이터 프레임을 추출하라

Ans = df.loc[(df.item_name =='Chicken Salad Bowl') & (df.new_price <= 9)]
Ans.head(5)

df.loc[(조건1) & (조건2)]

 

 

 

Question 28

df의 new_price 컬럼 값에 따라 오름차순으로 정리하고 index를 초기화 하여라

Ans = df.sort_values('new_price').reset_index(drop=True)
Ans.head(4)

df.sort_values('특정변수')

 

 

Question 29

df의 item_name 컬럼 값중 Chips 포함하는 경우의 데이터를 출력하라

Ans = df.loc[df.item_name.str.contains('Chips')]
Ans.head(5)

 

 

 

Question 30

df의 짝수번째 컬럼만을 포함하는 데이터프레임을 출력하라

Ans = df.iloc[:,::2]
Ans.head(5)

 

 

Question 31

df의 new_price 컬럼 값에 따라 내림차순으로 정리하고 index를 초기화 하여라

Ans = df.sort_values('new_price',ascending=False).reset_index(drop=True)
Ans.head(4)

df.sort_values('특정변수', ascending = False) - 특정변수 기준 내림차순 정렬

 

 

Question 32

df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 인덱싱하라

Ans = df.loc[(df.item_name =='Steak Salad') | (df.item_name =='Bowl')]
Ans

 

 

Question 33

df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, item_name를 기준으로 중복행이 있으면 제거하되 첫번째 케이스만 남겨라

Ans = df.loc[(df.item_name =='Steak Salad') | (df.item_name =='Bowl')]
Ans = Ans.drop_duplicates('item_name')
Ans

df.drop_duplicates('특정변수')

 

 

Question 34

df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, item_name를 기준으로 중복행이 있으면 제거하되 마지막 케이스만 남겨라

Ans = df.loc[(df.item_name =='Steak Salad') | (df.item_name =='Bowl')]
Ans = Ans.drop_duplicates('item_name',keep='last')
Ans

df.drop_duplicates('특정변수', keep = 'last')

특정변수 기준으로 중복행 제거하되 마지막 케이스 남기기

 

 

Question 35

df의 데이터 중 new_price값이 new_price값의 평균값 이상을 가지는 데이터들을 인덱싱하라

Ans = df.loc[df.new_price >= df.new_price.mean()]
Ans.head(5)

 

 

Question 36

df의 데이터 중 item_name의 값이 Izze 데이터를 Fizzy Lizzy로 수정하라

df.loc[df.item_name =='Izze','item_name'] = 'Fizzy Lizzy'
Ans = df
Ans.head(3)

 

 

Question 37

df의 데이터 중 choice_description 값이 NaN 인 데이터의 갯수를 구하여라

Ans = df.choice_description.isnull().sum()
Ans

df.특정변수.isnull().sum()

 

 

Question 38

df의 데이터 중 choice_description 값이 NaN 인 데이터를 NoData 값으로 대체하라(loc 이용)

df.loc[df.choice_description.isnull(),'choice_description'] ='NoData'
Ans = df
Ans.head()

 

 

Question 39

df의 데이터 중 choice_description 값에 Black이 들어가는 경우를 인덱싱하라

Ans = df[df.choice_description.str.contains('Black')]
Ans.head(5)

df.loc[df.특정변수.str.contains('')]

 

 

Question 40

df의 데이터 중 choice_description 값에 Vegetables 들어가지 않는 경우의 갯수를 출력하라

Ans = len(df.loc[~df.choice_description.str.contains('Vegetables')])
Ans

df.loc[~df.특정변수.str.contains('')] : ''포함하지 않는

 

 

 

Question 41

df의 데이터 중 item_name 값이 N으로 시작하는 데이터를 모두 추출하라

Ans = df[df.item_name.str.startswith('N')]
Ans.head(3)

df.loc[df.특정변수.startswith('')]

 

 

 

Question 42

df의 데이터 중 item_name 값의 단어갯수가 15개 이상인 데이터를 인덱싱하라

Ans= df[df.item_name.str.len() >=15]
Ans.head(3)

df[df.특정변수.str.len() >= 15]

 

 

 

Question 43

df의 데이터 중 new_price값이 lst에 해당하는 경우의 데이터 프레임을 구하고 그 갯수를 출력하라

lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]
Ans = df.loc[df.new_price.isin(lst)]

display(Ans.head(3))
print(len(Ans))

df.loc[df.특정변수.isin(lst)]

 

 

 

 

 

 

 

'Python' 카테고리의 다른 글

05 Time_Series  (0) 2022.08.13
04 Apply, Map  (0) 2022.08.07
03 Grouping  (0) 2022.08.07
01 Getting & Knowing Data  (0) 2022.08.07
for문 동적변수 생성  (0) 2022.08.07

+ Recent posts