IT story

팬더 시리즈 또는 인덱스를 Numpy 배열로 어떻게 변환합니까?

hot-time 2020. 4. 7. 08:30
반응형

팬더 시리즈 또는 인덱스를 Numpy 배열로 어떻게 변환합니까?


DataFrame의 인덱스 또는 열을 NumPy 배열 또는 파이썬 목록으로 얻는 방법을 알고 있습니까?


NumPy 배열을 얻으려면 다음 values속성을 사용해야 합니다.

In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
   A  B
a  1  4
b  2  5
c  3  6

In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)

데이터가 이미 저장되어있는 방식에 액세스하므로 변환 할 필요가 없습니다.
참고 :이 속성은 다른 많은 팬더 개체에도 사용할 수 있습니다.

In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])

색인을 목록으로 가져 오려면 다음을 호출하십시오 tolist.

In [4]: df.index.tolist()
Out[4]: ['a', 'b']

마찬가지로 열도 마찬가지입니다.


당신은 사용할 수 있습니다 df.index사용하여 목록에있는 값을 인덱스 오브젝트에 액세스하고 얻을 df.index.tolist(). 마찬가지로 df['col'].tolist()Series에도 사용할 수 있습니다 .


다중 색인 데이터 프레임을 다루는 경우 다중 색인의 한 이름 열만 추출하는 것이 좋습니다. 당신은 이것을 할 수 있습니다

df.index.get_level_values('name_sub_index')

물론 name_sub_index의 요소해야합니다FrozenList df.index.names


2019 년 v0.24.0 + 현재 .

.values이 방법을 선호 하여 사용을 더 이상 사용하지 마십시오 !

이후 v0.24.0에서, 우리는 두 브랜드 때리기 새로운 선호에서 NumPy와 배열을 얻기위한 방법이있을 것이다 Index, Series그리고 DataFrame객체 : 그들은이다 to_numpy(),하고 .array. 사용법과 관련하여 문서에는 다음이 언급됩니다.

우리는 제거되거나 사용되지 않았다 Series.values거나 DataFrame.values,하지만 우리는 매우 좋습니다 사용 .array또는 .to_numpy()대신.

자세한 정보 는 v0.24.0 릴리스 정보의이 섹션 을 참조하십시오.


to_numpy() 방법

df.index.to_numpy()
# array(['a', 'b'], dtype=object)

df['A'].to_numpy()
#  array([1, 4])

기본적으로보기가 리턴됩니다. 수정하면 원본에 영향을 미칩니다.

v = df.index.to_numpy()
v[0] = -1

df
    A  B
-1  1  2
b   4  5

대신 사본이 필요하면 to_numpy(copy=True);

v = df.index.to_numpy(copy=True)
v[-1] = -123

df
   A  B
a  1  2
b  4  5

이 함수는 DataFrame 에도 작동합니다 ( .array그렇지 않지만).


array특성
이 특성은ExtensionArray인덱스 / 시리즈를 지원하는개체를반환합니다.

pd.__version__
# '0.24.0rc1'

# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df

   A  B
a  1  2
b  4  5

df.index.array    
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object

df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64

여기에서 다음을 사용하여 목록을 얻을 수 있습니다 list.

list(df.index.array)
# ['a', 'b']

list(df['A'].array)
# [1, 4]

또는 직접 전화 .tolist():

df.index.tolist()
# ['a', 'b']

df['A'].tolist()
# [1, 4]

반환되는 내용과 관련하여 문서에서 언급 한 내용은

들어 SeriesIndex일반 NumPy와 배열에 의해 뒷받침 ES, Series.array새로운를 반환합니다 arrays.PandasArray주위에 얇은 (노 복사)의 래퍼 인 numpy.ndarray. arrays.PandasArray특별히 그다지 유용하지는 않지만 팬더 또는 타사 라이브러리에 정의 된 확장 배열과 동일한 인터페이스를 제공합니다.

그래서, 요약하면, .array하나 돌아갑니다

  1. ExtensionArray인덱스 / 시리즈 의 기존 백업 또는
  2. 시리즈를 지원하는 NumPy 배열이있는 경우 ExtensionArray기본 배열 위에 얇은 래퍼로 객체가 생성됩니다.

두 가지 새로운 방법 추가의 이론적 근거이
기능은 두 가지 GitHub 이슈 GH19954GH23623 에서 논의 된 결과로 추가되었습니다 .

특히 문서는 이론적 근거를 언급합니다.

[...] .values반환 값이 실제 배열인지, 일부 변환인지, pandas 사용자 정의 배열 중 하나 (예 :)인지 확실하지 않았습니다 Categorical. 예를 들어 with PeriodIndex.values사용하면 ndarray매번 새로운 기간 객체가 생성 됩니다. [...]

이 두 기능은 올바른 방향으로의 주요 단계 인 API의 일관성을 향상시키는 것을 목표로합니다.

마지막으로 .values현재 버전에서는 더 이상 사용되지 않지만 향후 어느 시점에서 이러한 상황이 발생할 수 있으므로 가능한 한 빨리 새로운 API로 사용자를 마이그레이션하도록 권장합니다.


pandas v0.13부터 다음을 사용할 수도 있습니다 get_values.

df.index.get_values()

팬더 dataframe로 변환 list한 다음 기본을 사용했습니다 list.index(). 이 같은:

dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])

값을로 색인화했습니다 idx.


다음은 데이터 프레임 열을 numpy 배열로 변환하는 간단한 방법입니다.

df = pd.DataFrame(somedict) 
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])

ytrain_numpy는 numpy 배열입니다.

나는 시도 to.numpy()했지만 아래 오류가 발생했습니다 : TypeError : 선형 SVC를 사용하여 이진 관련성 분류를 수행하는 동안 유형에 대한 지원되지 않는 변환 : (dtype ( 'O')) . to.numpy ()는 dataFrame을 numpy 배열로 변환했지만 내부 요소의 데이터 유형이 위의 오류로 인해 나열되었습니다.

참고 : https://stackoverflow.com/questions/17241004/how-do-i-convert-a-pandas-series-or-index-to-a-numpy-array

반응형