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 |