반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- Kotlin
- matplotlib
- Apache
- google apps script
- Google Excel
- PySpark
- numpy
- dataframe
- django
- math
- c#
- Google Spreadsheet
- PostgreSQL
- SQL
- Tkinter
- 파이썬
- Excel
- Redshift
- string
- list
- PANDAS
- hive
- GIT
- array
- Python
- Java
- Github
- Mac
- gas
Archives
- Today
- Total
달나라 노트
Python Pandas : Series .values vs .to_numpy() 본문
728x90
반응형
Pandas Series .values vs .to_numpy()
둘 다 Series를 numpy array로 변환하지만, .values는 dtype에 따라 동작이 달라지고 원본을 건드릴 위험이 있습니다. .to_numpy()가 현재 권장 방식입니다.
기본 사용
결과는 같아 보입니다. 차이는 dtype이 복잡해질 때 드러납니다.
import pandas as pd
s = pd.Series([10, 20, 30])
s.values # array([10, 20, 30])
s.to_numpy() # array([10, 20, 30])
차이 1 — 반환 타입이 dtype에 따라 달라진다
.values는 Series 내부 저장 방식에 따라 반환 타입이 달라집니다.
# 일반 dtype → numpy array 반환
s = pd.Series([1, 2, 3])
type(s.values) # numpy.ndarray ✓
# nullable integer (대문자 I) → ExtensionArray 반환
s = pd.Series([1, 2, 3], dtype='Int64')
type(s.values) # pandas.arrays.IntegerArray ✗
# string dtype → StringArray 반환
s = pd.Series(['a', 'b'], dtype='string')
type(s.values) # pandas.arrays.StringArray ✗
numpy array인 줄 알고 numpy 연산을 쓰면 에러가 납니다.
.to_numpy()는 dtype에 상관없이 항상 numpy array를 반환합니다.
s = pd.Series([1, 2, 3], dtype='Int64')
type(s.to_numpy()) # numpy.ndarray ✓
차이 2 — view 반환으로 인한 원본 수정 위험
일반 dtype에서 .values는 Series 내부 데이터를 직접 가리키는 view를 반환합니다. 복사본이 아닙니다.
s = pd.Series([1, 2, 3])
arr = s.values
arr[0] = 99 # arr을 수정했는데
print(s)
# 0 99 ← 원본 Series도 바뀜!
# 1 2
# 2 3
arr과 s가 같은 메모리를 바라보고 있기 때문입니다.
.to_numpy()의 기본값은 copy=False로, 가능하면 view를 반환하지만 dtype 변환이 필요한 경우 자동으로 copy합니다. 원본 보호를 확실히 보장하려면 copy=True를 명시합니다.
s = pd.Series([1, 2, 3])
arr = s.to_numpy(copy=True)
arr[0] = 99
print(s)
# 0 1 ← 원본 그대로 보호됨
# 1 2
# 2 3
.values는 deprecated인가?
공식적으로 deprecated는 아닙니다. 하지만 pandas 공식 문서가 .to_numpy() 사용을 권장하고 있어 현업에서는 구식 방법으로 취급됩니다. 위에서 설명한 두 가지 이유 때문입니다.
- dtype에 따라 반환 타입이 달라짐
- view 반환으로 원본이 의도치 않게 변경될 수 있음
정리
.values |
.to_numpy() |
|
|---|---|---|
| 반환 타입 | dtype에 따라 다름 | 항상 numpy array |
| 원본 수정 위험 | 일반 dtype에서 있음 | copy=True로 방지 가능 |
| 권장 여부 | 구식 | 현재 권장 방식 |
안전한 기본값으로 쓰려면:
arr = s.to_numpy(copy=True)
728x90
반응형
'Python > Python Pandas' 카테고리의 다른 글
| Python Pandas : std() — 표준편차를 계산하는 메서드 (0) | 2026.05.14 |
|---|---|
| Python Pandas : where & mask (값 필터링하여 바꾸기) (0) | 2026.05.12 |
| Python Pandas : clip (최대 최소값 제한하기) (0) | 2026.05.12 |
| Python Pandas : info(), memory_usage() (DataFrame의 memory 사용량 보기) (0) | 2026.05.06 |
| Python Pandas : dtypes (column의 data type 출력, column data type 확인) (0) | 2025.09.28 |
Comments
