개발/Python

[Pandas Series_1] 판다스 시리즈 첫걸음, 수치 시리즈 분석 메서드

여러가지 공부를 하고 있습니다. 2025. 4. 24. 22:59

 

# 시리즈는 데이터 프레임에서 한 행이나 열만 선택하면 얻어지는 것 
In [6]:
import pandas as pd
In [8]:
titanic = pd.read_csv("titanic.csv")
In [10]:
titanic
Out[10]:
survived pclass sex age sibsp parch fare embarked deck 

 

0 3 male 22.0 1 0 7.2500 S NaN
1 1 female 38.0 1 0 71.2833 C C
1 3 female 26.0 0 0 7.9250 S NaN
1 1 female 35.0 1 0 53.1000 S C
0 3 male 35.0 0 0 8.0500 S NaN
... ... ... ... ... ... ... ... ...
0 2 male 27.0 0 0 13.0000 S NaN
1 1 female 19.0 0 0 30.0000 S B
0 3 female NaN 1 2 23.4500 S NaN
1 1 male 26.0 0 0 30.0000 C C
0 3 male 32.0 0 0 7.7500 Q NaN

891 rows × 9 columns

In [12]:
titanic["age"]
Out[12]:
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
In [14]:
type(titanic["age"])
Out[14]:
pandas.core.series.Series
In [18]:
type(titanic.age)
Out[18]:
pandas.core.series.Series
In [20]:
titanic["age"].equals(titanic.age)
Out[20]:
True
In [22]:
age = titanic.age
In [24]:
age
Out[24]:
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
In [26]:
# 판다스에서는 데이터프레임과 시리즈가 대부분의 속성과 메소드를 공유해서 데이터프레임에만 적용되거나 시리즈에만 적용되는 메소드나 속성은 거의 없음 
In [30]:
age.head(2)
Out[30]:
0    22.0
1    38.0
Name: age, dtype: float64
In [32]:
age.tail()
Out[32]:
886    27.0
887    19.0
888     NaN
889    26.0
890    32.0
Name: age, dtype: float64
In [36]:
age.dtype
Out[36]:
dtype('float64')
In [38]:
age.shape
Out[38]:
(891,)
In [40]:
len(age) # 판다스의 기본 함수도 사용할 수 있음 
Out[40]:
891
In [42]:
age.index
Out[42]:
RangeIndex(start=0, stop=891, step=1)
In [46]:
age.info()
<class 'pandas.core.series.Series'>
RangeIndex: 891 entries, 0 to 890
Series name: age
Non-Null Count  Dtype  
--------------  -----  
714 non-null    float64
dtypes: float64(1)
memory usage: 7.1 KB
In [50]:
age.to_frame()
Out[50]:
age 

 

22.0
38.0
26.0
35.0
35.0
...
27.0
19.0
NaN
26.0
32.0

891 rows × 1 columns

In [52]:
# Analyzing Numerical Series
In [58]:
age # 수치형 시리즈와 그 데이터에 대해 자세히 배우도록 해보자 , age 열은 다음과 같이 수치형 데이터들을 확인할 수 있음
Out[58]:
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
In [60]:
age.describe() # 통계적 요약 가능, null값과 같은 결측값을 제외한 원소의 수인 count가 714로 표현됨 
Out[60]:
count    714.000000
mean      29.699118
std       14.526497
min        0.420000
25%       20.125000
50%       28.000000
75%       38.000000
max       80.000000
Name: age, dtype: float64
In [64]:
age.count() # 결측값을 제외한 값들의 수를 나타낼 수 있음 
Out[64]:
714
In [70]:
age.size # 결측값을 포함
Out[70]:
891
In [72]:
len(age) # 마찬가지임 
Out[72]:
891
In [74]:
# 판다스 라이브러리의 중요한 장점은 판다스가 지저분하고 불확실한 실제 데이터를 잘 다룰 수 있도록 설계되어 있다는 점임. 
In [110]:
'''
Signature:
age.sum(
    axis: 'Axis | None' = None,
    skipna: 'bool' = True,
    numeric_only: 'bool' = False,
    min_count: 'int' = 0,
    **kwargs,
)
'''
age.sum() 
Out[110]:
21205.17
In [108]:
sum(age) # 파이썬 내장함수를 사용하면 nan이 나옴, 내장 함수가 결측값을 어떻게 처리해아할지 모르기 때문임 
Out[108]:
nan
In [112]:
age.unique() # 고유 값들만 가져오게됨 
Out[112]:
array([22.  , 38.  , 26.  , 35.  ,   nan, 54.  ,  2.  , 27.  , 14.  ,
        4.  , 58.  , 20.  , 39.  , 55.  , 31.  , 34.  , 15.  , 28.  ,
        8.  , 19.  , 40.  , 66.  , 42.  , 21.  , 18.  ,  3.  ,  7.  ,
       49.  , 29.  , 65.  , 28.5 ,  5.  , 11.  , 45.  , 17.  , 32.  ,
       16.  , 25.  ,  0.83, 30.  , 33.  , 23.  , 24.  , 46.  , 59.  ,
       71.  , 37.  , 47.  , 14.5 , 70.5 , 32.5 , 12.  ,  9.  , 36.5 ,
       51.  , 55.5 , 40.5 , 44.  ,  1.  , 61.  , 56.  , 50.  , 36.  ,
       45.5 , 20.5 , 62.  , 41.  , 52.  , 63.  , 23.5 ,  0.92, 43.  ,
       60.  , 10.  , 64.  , 13.  , 48.  ,  0.75, 53.  , 57.  , 80.  ,
       70.  , 24.5 ,  6.  ,  0.67, 30.5 ,  0.42, 34.5 , 74.  ])
In [116]:
len(age.unique()) # 결측값도 포함하기 때문에 89가 출력됨 
Out[116]:
89
In [122]:
'''
unique() 와 다른점
Return number of unique elements in the object.

Excludes NA values by default.
'''

age.nunique()
Out[122]:
88
In [136]:
"""
Signature:
age.value_counts(
    normalize: 'bool' = False,
    sort: 'bool' = True,
    ascending: 'bool' = False,
    bins=None,
    dropna: 'bool' = True,
) -> 'Series'
위에 바꾸면 내입맛대로 사용가능 
"""
age.value_counts()
Out[136]:
age
24.00    30
22.00    27
18.00    26
19.00    25
28.00    25
         ..
36.50     1
55.50     1
0.92      1
23.50     1
74.00     1
Name: count, Length: 88, dtype: int64
In [138]:
30/age.count()
Out[138]:
0.04201680672268908
In [140]:
age.value_counts(bins = 5) # 길이를 구해서 bins = 5 로 설정해두었기 때문에 나누기 5 함 
Out[140]:
(16.336, 32.252]    346
(32.252, 48.168]    188
(0.339, 16.336]     100
(48.168, 64.084]     69
(64.084, 80.0]       11
Name: count, dtype: int64
In [142]:
# 여기서 value_counts 의 결과도 판다스 시리즈임 
In [154]:
age.value_counts(normalize = True).sum()
Out[154]:
1.0