values
및 의 사용법을 더 이상 사용하지 마십시오 as_matrix()
!
pandas v0.24.0에는 pandas 객체에서 NumPy 배열을 얻는 두 가지 새로운 방법이 도입되었습니다.
to_numpy()
에 정의 된 Index
, Series,
그리고 DataFrame
개체 및
array
, Index
및 Series
객체에만 정의되어 있습니다.
에 대한 v0.24 문서를 방문하면 다음과 .values
같은 큰 빨간색 경고가 표시됩니다.
경고 : DataFrame.to_numpy()
대신 사용 하는 것이 좋습니다 .
참조 v0.24.0 릴리스 노트의이 섹션 , 그리고 이 답변 자세한 정보를.
API 전체의 일관성을 to_numpy
높이기 위해 DataFrames에서 기본 NumPy 배열을 추출 하는 새로운 방법 이 도입되었습니다.
# Setup.
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c'])
df.to_numpy()
array([[1, 4],
[2, 5],
[3, 6]])
위에서 언급했듯이이 방법은 객체 Index
와 Series
객체 에도 정의되어 있습니다 ( 여기 참조 ).
df.index.to_numpy()
# array(['a', 'b', 'c'], dtype=object)
df['A'].to_numpy()
# array([1, 2, 3])
기본적으로보기가 반환되므로 수정 한 내용이 원본에 영향을줍니다.
v = df.to_numpy()
v[0, 0] = -1
df
A B
a -1 4
b 2 5
c 3 6
대신 사본이 필요한 경우)를 사용 to_numpy(copy=True
하십시오.
ExtensionTypes의 팬더> = 1.0 업데이트
pandas 1.x를 사용하는 경우 확장 유형을 훨씬 더 많이 다루게 될 것입니다. 이러한 확장 유형이 올바르게 변환되도록 좀 더 조심해야합니다.
a = pd.array([1, 2, None], dtype="Int64")
a
<IntegerArray>
[1, 2, <NA>]
Length: 3, dtype: Int64
# Wrong
a.to_numpy()
# array([1, 2, <NA>], dtype=object) # yuck, objects
# Right
a.to_numpy(dtype='float', na_value=np.nan)
# array([ 1., 2., nan])
이것은 문서에서 호출됩니다 .
필요한 경우 dtypes
...
다른 답변에서 볼 수 있듯이이 DataFrame.to_records
작업을 수행하는 좋은 방법입니다.
df.to_records()
# rec.array([('a', -1, 4), ('b', 2, 5), ('c', 3, 6)],
# dtype=[('index', 'O'), ('A', '<i8'), ('B', '<i8')])
to_numpy
불행히도이 작업은 수행 할 수 없습니다 . 그러나 대안으로 다음을 사용할 수 있습니다 np.rec.fromrecords
.
v = df.reset_index()
np.rec.fromrecords(v, names=v.columns.tolist())
# rec.array([('a', -1, 4), ('b', 2, 5), ('c', 3, 6)],
# dtype=[('index', '<U1'), ('A', '<i8'), ('B', '<i8')])
성능면에서는 거의 동일합니다 (실제로 사용하는 rec.fromrecords
것이 약간 빠릅니다).
df2 = pd.concat([df] * 10000)
%timeit df2.to_records()
%%timeit
v = df2.reset_index()
np.rec.fromrecords(v, names=v.columns.tolist())
11.1 ms ± 557 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
9.67 ms ± 126 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
새로운 방법을 추가하는 근거
to_numpy()
array
두 개의 GitHub 이슈 GH19954 및 GH23623 에 대한 토론의 결과로 (와 함께 )가 추가되었습니다 .
특히 문서는 이론적 근거를 언급합니다.
[...] .values
반환 값이 실제 배열인지, 일부 변환인지, pandas 사용자 정의 배열 중 하나 (예 :)인지 확실하지 않았습니다 Categorical
. 예를 들어 with PeriodIndex
를 .values
사용하면 ndarray
매번 새로운 기간 객체가 생성 됩니다. [...]
to_numpy
올바른 방향의 주요 단계 인 API의 일관성을 향상시키는 것을 목표로합니다. .values
현재 버전에서는 더 이상 사용되지 않지만 향후 어느 시점에서 이러한 상황이 발생할 수 있으므로 가능한 한 빨리 새로운 API로 사용자를 마이그레이션하도록 촉구합니다.
다른 솔루션의 비판
DataFrame.values
이미 언급했듯이 행동이 일치하지 않습니다.
DataFrame.get_values()
는 단순히 래퍼 DataFrame.values
이므로 위에서 언급 한 모든 것이 적용됩니다.
DataFrame.as_matrix()
더 이상 사용되지 않습니다. 사용 하지 마십시오 !