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


264

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



이것이 귀하의 질문에 대답합니까? 팬더 데이터 프레임을 NumPy 배열로 변환
AMC

1
참고 : 이와 같이 Pandas DataFrame을 배열 (또는 목록)로 변환해야하는 것은 다른 문제를 나타낼 수 있습니다. DataFrame이 특정 사용 사례에 적합한 데이터 구조이고 Pandas에 관심있는 작업을 수행하는 방법이 포함되지 않는 것이 좋습니다.
AMC

답변:


353

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', 'c']

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


참고 : NumPy 배열을 원한다면 권장 .values되지 않습니다 .to_numpy(). 확장 가능 데이터가 이미 저장된 방식에 액세스하므로 변환 할 필요가 없습니까?
AMC

cs95 의해 답변 의 좋은 설명을 제공 .values, .to_numpy()하고 .array.
AMC

75

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


리스트 배열이 아닌 instanceMethod를 반환합니다.
V Shreyas

12
@VShreyas, 어떻습니까df.index.values.tolist()
LancelotHolmes 2

3
df.index.tolist()인스턴스 메소드를 반환하지 않습니다. 인덱스 목록을 반환합니다. 팬더 색인에 정의 된 메소드입니다. 값을 먼저 호출하는 것이 가능하지만 작업을 numpy로 위임하는 것은 수정이 아니라 대안 일뿐입니다.
ayhan

51

팬더> = 0.24

.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로 사용자를 마이그레이션하도록 촉구합니다.


48

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

df.index.get_level_values('name_sub_index')

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


16

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

df.index.get_values()

5
이 값과 .value 사이에 차이가 있습니까? (이 기능은 0.13.0 문서에서 나타나기 때문에 버전 정보를 업데이트했습니다.)
Andy Hayden

@Andy Hayden : .get_values가 현재 값만 얻는 공식적인 방법이라는 점의 차이점이 아닌 반면 .values ​​(예 : 다중 인덱스)는 행 또는 열이 삭제 된 인덱스 값을 반환 할 수 있습니까?
Ezekiel Kruglick 22:07에

@EzekielKruglick 그래서 항상 사본입니까? 문서에 링크 된 내용은 매우 가볍습니다 .MI에있는 경우에도 .values에 있지 않더라도 이와 같은 속임수를 얻지 못했다고 생각하여 이것을 보여주는 예제를 보는 것이 좋습니다!
Andy Hayden

@AndyHayden : 나는 당신의 의견을 잘못 읽고 있다고 생각합니다. 맞습니다. .values는 양호하고 .level은 구식이며 get_values는 삭제 된 행 / 열을 제외하고 현재 값을 올바르게 제공합니다. (! 물론) : 원래 GitHub의 문제 github.com/pydata/pandas/issues/3686하지만 난 그냥 확인하고 .values처럼 보인다는 그냥 우리가 얘기하고 있었는지 알았는데 아닌 다른 형태로 최신 정보까지 제공합니다
에스겔 Kruglick

1
@AndyHayden 아니요, 차이는 없습니다. get_values그냥 전화하십시오 .values. 입력 할 문자가 더 많습니다.
cs95

0

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

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

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


그런 다음 기본 list.index () 사용했습니다 . 시리즈를 목록으로 변환하는 문제와 어떻게 관련이 있습니까?
AMC

0

가장 최근의 방법은 .to_numpy () 함수를 사용하는 것입니다.

'price'열이있는 데이터 프레임이있는 경우 다음과 같이 변환 할 수 있습니다.

priceArray = df['price'].to_numpy()

float 또는 object와 같은 데이터 유형을 함수의 인수로 전달할 수도 있습니다.


-1

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

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

ytrain_numpy는 numpy 배열입니다.

나는 함께 노력했다 to.numpy() 그러나 그것은 나에게 아래의 오류 준 : (DTYPE ( 'O')) : 형식 오류 : 유형에 지원되는 변환을 선형 SVC를 사용하여 바이너리 관련성의 분류 일을하는 동안. to.numpy ()는 dataFrame을 numpy 배열로 변환했지만 내부 요소의 데이터 유형이 위의 오류로 인해 나열되었습니다.


to.numpy ()로 시도했지만 아래 오류가 발생했습니다. to.numpy ()는 dataFrame을 numpy 배열로 변환했지만 내부 요소의 데이터 유형이 위의 오류로 인해 나열되었습니다. 그러나 이것이 실제로는 잘못이 to_numpy아닙니다.
AMC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.