[Intro To Data

1. 시리즈의 정의

모든 데이터 유형(정수, 문자열, 부동 소수점, Python 객체 등)을 포함할 수 있는 레이블의 1차원 배열입니다.

2. 시리즈 호출 방법

s = pd.Series(데이터, 인덱스=인덱스)

3. 시리즈의 종류

하나의 dtype만 가능합니다. (특정한 경우를 제외하고 여러 유형의 데이터는 허용되지 않습니다.)

4. 시리즈를 만들 수 있는 데이터 유형은 무엇입니까?

1) 파이썬 사전

: 사전의 태그가 인덱스가 되어 태그에 해당하는 데이터 값을 추출합니다.

d = {"a": 0.0, "b": 1.0, "c": 2.0}

pd.Series(d)
Out(10): 
a    0.0
b    1.0
c    2.0
dtype: float64

pd.Series(d, index=("b", "c", "d", "a"))  
Out(11): 
b    1.0
c    2.0
d    NaN  # dictionary에 'd' 레이블이 없기 때문에 NaN으로 표시됨
a    0.0

2) 은다레이

: 인덱스는 데이터 길이와 같아야 합니다.

: 인덱스가 전달되지 않으면 인덱스가 값으로 생성됩니다. (0, 1, … , 길이(데이터)-1)

In (3): s = pd.Series(np.random.randn(5), index=("a", "b", "c", "d", "e"))

In (4): s
Out(4): 
a    0.469112
b   -0.282863
c   -1.509059
d   -1.135632
e    1.212112
dtype: float64

In (5): s.index
Out(5): Index(('a', 'b', 'c', 'd', 'e'), dtype="object")

In (6): pd.Series(np.random.randn(5))
Out(6): 
0   -0.173215
1    0.119209
2   -1.044236
3   -0.861849
4   -2.104569

# pandas는 고유하지 않은 인덱스 값을 지원한다. 
# 그래서, 중복 인덱스를 허용하지 않는 연산을 시도하면 예외가 발생한다.

3) 스칼라 값

: 데이터가 스칼라 값인 경우 인덱스를 제공해야 합니다.

: 인덱스의 길이만큼 값이 반복됩니다.

pd.Series(5.0, index=("a", "b", "c", "d", "e"))
Out(12): 
a    5.0
b    5.0
c    5.0
d    5.0
e    5.0

5. 시리즈의 특징 및 사용법

1) ndarray와 유사하게 작동합니다.

2) 대부분의 NumPy 함수의 인수로 사용할 수 있습니다.

s + s
Out(29): 
a     0.938225
b    -0.565727
c    -3.018117
d    -2.271265
e    24.000000
dtype: float64

s * 2
Out(30): 
a     0.938225
b    -0.565727
c    -3.018117
d    -2.271265
e    24.000000
dtype: float64

np.exp(s)
Out(31): 
a         1.598575
b         0.753623
c         0.221118
d         0.321219
e    162754.791419

3) 슬라이싱과 같은 작업에서 인덱스도 슬라이스로 나뉩니다.

s(0)
Out(13): 0.4691122999071863

s(:3)
Out(14): 
a    0.469112
b   -0.282863
c   -1.509059
dtype: float64

s(s > s.median())
Out(15): 
a    0.469112
e    1.212112
dtype: float64

s((4, 3, 1))
Out(16): 
e    1.212112
d   -1.135632
b   -0.282863
dtype: float64

np.exp(s)
Out(17): 
a    1.598575
b    0.753623
c    0.221118
d    0.321219
e    3.360575

4) 시리즈와 ndarray의 주요 차이점은 데이터가 시리즈의 레이블로 자동 정렬된다는 것입니다. 이는 편집된 두 시리즈의 레이블이 동일한지 여부를 고려하지 않고 계산을 작성할 수 있으므로 편리합니다.

5) 행 연산을 수행할 때 인덱스가 유니온으로 이어집니다. 둘 다에서 레이블을 찾을 수 없으면 결과가 누락(NaN)으로 표시됩니다.

s = pd.Series({"a": 1, "b": 2, "c": 3, "d": 4, "e": 5})
s(1:) + s(:-1)
Out(1): 
a    NaN
b    4.0
c    6.0
d    8.0
e    NaN

6) 인덱스 레이블로 값을 얻고 설정할 수 있다는 점에서 사전과 유사하게 작동합니다.

s
Out(23): 
a     0.469112
b    -0.282863
c    -1.509059
d    -1.135632
e    12.000000
dtype: float64

s("e") = 12.0

"e" in s
Out(24): True

"f" in s
Out(25): False

s("f")  # 이 경우에는 해당 레이블이 없기 때문에 에러 발생.

# 그래서, 이럴 경우에는
s.get("f")

s.get("f", np.nan)
Out(28): nan
# 이렇게 사용하면 누락된 레이블이 None 또는 지정된 기본값을 반환한다.

7) 인덱스가 없는 실제 배열이 필요한 경우 Series.array를 사용하십시오.

s.array
Out(19): 
<PandasArray>
( 0.4691122999071863, -0.2828633443286633, -1.5090585031735124,
 -1.1356323710171934,  1.2121120250208506)

8) 실제 ndarray가 필요한 경우 Series.to_numpy()를 사용하십시오.

s.to_numpy()
Out(20): array(( 0.4691, -0.2829, -1.5091, -1.1356,  1.2121))

9) 이름을 설정 및 변경할 수 있습니다.

s = pd.Series(np.random.randn(5), name="something")

s
Out(34): 
0   -0.494929
1    1.071804
2    0.721555
3   -0.706771
4   -1.039575
Name: something, dtype: float64

s.name
Out(35): 'something'

s2 = s.rename("different")

s2.name
Out(37): 'different'

# 이름을 변경하는 경우, s와 s2는 서로 다른 객체를 참조한다.