본문 바로가기
개발일지/Pandas

pandas 판다스 기초 5

by 다니엘의 개발 이야기 2022. 7. 15.
320x100
summer = pd.read_csv('summer.csv', index_col='Athlete')

event = summer.Event
event.head()
# na_position='last'의 의미는 앞에서 어떻게 ascending 이 되든 관계없이 가장 마지막에 결측치 값을 넣는다는 의미다.
sales.sort_values(ascending=False, na_position='last', inplace=True)
titanic = pd.read_csv('titanic.csv')
titanic.head(3)
age = titanic.age
age

'''
0      22.0
1      38.0
2      26.0
3      35.0
4      35.0
       ... 
886    27.0
887    19.0
888     NaN
889    26.0
890    32.0
Name: age, Length: 891, dtype: float64
'''
# seires의 가장 큰 값 5개를 출력해준다. 기본적으로. 따라서 n= ? 로 ?값에 따라서 얼마나 더 많이, 적게 출력하는지도 설정이 가능하다.
# head()를 할때 ()안의 값을 쓰듯이 n = 해줄필요 없고 그냥 숫자만 입력해줘도 잘 작동 된다.
age.nlargest()

'''
630    80.0
851    74.0
96     71.0
493    71.0
116    70.5
Name: age, dtype: float64
'''
# 가장 적은 나이부터 오름차순으로 정렬
age.sort_values(ascending=True).iloc[:]
'''
803    0.42
755    0.67
644    0.75
469    0.75
78     0.83
       ... 
859     NaN
863     NaN
868     NaN
878     NaN
888     NaN
Name: age, Length: 891, dtype: float64
'''
# 가장 적은 나이를 오름차순으로 정렬
age.nsmallest()
'''
803    0.42
755    0.67
469    0.75
644    0.75
78     0.83
Name: age, dtype: float64
'''
# nlargest와 nsmallest는 이렇게도 활용이 가능하다.
age.nsmallest().index[0]
# 803
# 가장 큰 값(values)이 있는 인덱스의 값(index)을 반환해준다.
titanic.age.idxmax()
# 630
# idxmax()와 반대다.
titanic.age.idxmin()
# 803
# 이런식으로 titanic.age안의 최소값에 해당하는 인덱스를 리턴해주는 대로 loc에 넣어서 가장 적은 벨류. age에서 가장 적은 벨류니깐 가장 작은 나이
# 에 해당하는 값을 얻어낼 수 있다.
# 그러나 iloc가 쓰이기에 더 좋다. 현재의 경우에는 titanic의 행 인덱스 값이 숫자라 상관없지만, 그렇지 않을경우엔 작동을 하지 않기 때문이다.
titanic.loc[titanic.age.idxmin()]
dic = {'Mon':10, 'Tue':25, 'Wed':6, 'Thu':36, 'Fri':2, 'Sat':0, 'Sun':None}
dic
# 최소값을 구하는 방법 1
sales.sort_values(ascending=True).index[0]
# 6
# 최소값을 구하는 방법 2
sales.idxmin()
# 6
#### Manipulating Series

sales = pd.Series([10,25,6,36,2,0,None, 5], index = ['Mon', 'Tue','Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon'])

# 기존의 sales의 Sun에는 결측치값으로 차있었다.
sales.Sun
# nan
# 위의 결측치를 새로운 숫자로 채워주는 작업
sales.Sun = 0
sales.Sun
# 0.0
# 기존의 값을 덮어주는 작업도 원리는 같다.

sales.iloc[3] = 30
sales.iloc[3]
# 30.0
sales

'''
Mon    10.0
Tue    25.0
Wed     6.0
Thu    30.0
Fri     2.0
Sat     0.0
Sun     0.0
Mon     5.0
dtype: float64
'''
# 값이 10% 변동이 있을때
# 벡터화 연산.
(sales/1.1)


'''
Mon     9.090909
Tue    22.727273
Wed     5.454545
Thu    27.272727
Fri     1.818182
Sat     0.000000
Sun     0.000000
Mon     4.545455
dtype: float64
'''
# 재밌는점은 inplace=True를 입력 안해주는 이상, 계속해서 초기화될 수 있다.
# 더 정확히는 가상의 숫자를 표현해주는 것이기 때문에 몇번 반복을 하든 괜찮다.

# 10%의 변동이 있고, 소수점 2째자리까지만 표현해주기를 원할경우
(sales/1.1).round(2)

'''
Mon     9.09
Tue    22.73
Wed     5.45
Thu    27.27
Fri     1.82
Sat     0.00
Sun     0.00
Mon     4.55
dtype: float64
'''
(sales/1.1).round(2).inplace=True
# 이거는 작동은 되지만, 실질적인 값은 변동이 없다.
# 따라서 이 경우에는, 과거의 변수값에 덮어주는 형식으로 진행한다.

sales = (sales/1.1).round(2)
sales

'''
Mon     9.09
Tue    22.73
Wed     5.45
Thu    27.27
Fri     1.82
Sat     0.00
Sun     0.00
Mon     4.55
dtype: float64
'''
sales.Mon

'''
Mon    9.09
Mon    4.55
dtype: float64
'''
sales.Mon = 0
sales.Mon

'''
Mon    0.0
Mon    0.0
dtype: float64
'''

 

 



titanic = pd.read_csv('titanic.csv')

age = titanic.age
age.head(2)

'''
0    22.0
1    38.0
Name: age, dtype: float64
'''
age.iloc[0]

# 22.0
# 이제 덮어쓰기 시도
age.iloc[0] = 30
age.iloc[0]
# 30.0

# SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
# 라는 경고문구는 "지금 값을 변경하려고 시도하면 데이터프레임의 값도 같이 바뀌게 될것이다."라는 뜻이다.
# 재미있는 부분은 age는 titanic의 age라는 컬럼을 "참조"해서 만든 값이다.
# 참조해서 새롭게 재 탄생된 age라는 변수의 0자리 값을 변경해주면
# titanic의 age 0 자리값도 변하게 된다는 점이 신기하다.

titanic.iloc[0]

'''
survived       0
pclass         3
sex         male
age         30.0
sibsp          1
parch          0
fare        7.25
embarked       S
deck         NaN
Name: 0, dtype: object
'''
300x250

'개발일지 > Pandas' 카테고리의 다른 글

pandas 판다스 틀린부분 복기  (0) 2022.07.16
pandas 판다스 기초 6  (0) 2022.07.16
pandas 판다스 기초 4  (0) 2022.07.15
pandas (판다스) 기초3  (0) 2022.07.15
pandas(판다스) 기초 2  (0) 2022.07.14