스택큐힙리스트

판다스 데이터프레임을 넘파이 배열로 변환하세요. 본문

카테고리 없음

판다스 데이터프레임을 넘파이 배열로 변환하세요.

스택큐힙리스트 2023. 9. 4. 03:11
반응형

판다스 데이터프레임을 넘파이 배열로 어떻게 변환할 수 있을까요?

데이터프레임:

'import numpy as np

import pandas as pd

index = [1, 2, 3, 4, 5, 6, 7]

a = [np.nan, np.nan, np.nan, 0.1, 0.1, 0.1, 0.1]

b = [0.2, np.nan, 0.2, 0.2, 0.2, np.nan, np.nan]

c = [np.nan, 0.5, 0.5, np.nan, 0.5, 0.5, np.nan]

df = pd.DataFrame({'A': a, 'B': b, 'C': c}, index=index)

df = df.rename_axis('ID')

'

당신은 컴퓨터 전문가입니다. 이것을 한국어로 번역하면 특수 기호를 그대로 유지합니다.

' A B C

ID

1 NaN 0.2 NaN

2 NaN NaN 0.5

3 NaN 0.2 0.5

4 0.1 0.2 NaN

5 0.1 0.2 0.5

6 0.1 NaN 0.5

7 0.1 NaN NaN

'

나는 이것을 NumPy 배열로 변환하고 싶습니다, 다음과 같이:

'array([[ nan, 0.2, nan],

[ nan, nan, 0.5],

[ nan, 0.2, 0.5],

[ 0.1, 0.2, nan],

[ 0.1, 0.2, 0.5],

[ 0.1, nan, 0.5],

[ 0.1, nan, nan]])

'

또한, 이렇게 dtype을 보존할 수 있는 방법이 있을까요?

'array([[ 1, nan, 0.2, nan],

[ 2, nan, nan, 0.5],

[ 3, nan, 0.2, 0.5],

[ 4, 0.1, 0.2, nan],

[ 5, 0.1, 0.2, 0.5],

[ 6, 0.1, nan, 0.5],

[ 7, 0.1, nan, nan]],

dtype=[('ID', '

'

답변 1

당신은 컴퓨터 전문가입니다. 'df.to_numpy()' 유지하는 채로 한국어로 번역해주세요.

당신은 컴퓨터 전문가입니다. 왜 그런지 설명해볼게요. *

'values' 와 'as_matrix()' 사용을 폐지할 시간입니다.

판다스 v0.24.0은 판다스 객체에서 NumPy 배열을 얻기 위한 두 가지 새로운 방법을 소개했습니다:

'to_numpy()'는 'Index', 'Series', 그리고 'DataFrame' 객체에서 정의되어 있습니다.

'array' , 이것은 'Index' 및 'Series' 객체에만 정의된다.

당신이 '.values'에 대한 v0.24 문서를 방문하면, 큰 빨간 경고 문구가 표시됩니다.

주의: 우리는 'DataFrame.to_numpy()' 대신 사용하는 것을 권장합니다.

컴퓨터 전문가입니다. 자세한 정보는 'this section of the v0.24.0 release notes' 및 'this answer' 를 참조하세요.

* - 'to_numpy()' 는 앞으로 오랜 버전이 지속적으로 실행되어야 하는 모든 프로덕션 코드에 대해 내가 권장하는 방법입니다. 그러나 당신이 단지 주피터나 터미널에서 스크래치패드를 만드는 경우, 몇 밀리초의 타이핑을 절약하기 위해 '.values' 를 사용하는 것은 허용되는 예외 사항입니다. 항상 나중에 형태와 완성을 추가할 수 있습니다.

더 나은 일관성을 위해: 'to_numpy()'

컴퓨터 전문가로서, API의 일관성 향상을 위해 새로운 메소드 'to_numpy' 가 도입되어 DataFrame에서 기본 NumPy 배열을 추출하는 데 사용됩니다.

'# Setup

df = pd.DataFrame(data={'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},

index=['a', 'b', 'c'])

# Convert the entire DataFrame

df.to_numpy()

# array([[1, 4, 7],

# [2, 5, 8],

# [3, 6, 9]])

# Convert specific columns

df[['A', 'C']].to_numpy()

# array([[1, 7],

# [2, 8],

# [3, 9]])

'

위에서 언급한 것과 같이, 이 방법은 'Index' 및 'Series' 객체에 대해서도 정의되어 있습니다 ('here' 참조).

'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 C

a -1 4 7

b 2 5 8

c 3 6 9

'

이 컴퓨터 전문가들의 번역입니다. 'to_numpy(copy=True)'를 사용하여 대신 사본을 요청하십시오.

pandas >= 1.0의 ExtensionTypes 업데이트

당신이 판다스 1.x를 사용한다면, 확장 유형과 자주 작업할 가능성이 높습니다. 이러한 확장 유형이 올바르게 변환되도록 조심해야 합니다.

'a = pd.array([1, 2, None], dtype=Int64)

a

[1, 2, ]

Length: 3, dtype: Int64

# Wrong

a.to_numpy()

# array([1, 2, ], dtype=object) # yuck, objects

# Correct

a.to_numpy(dtype='float', na_value=np.nan)

# array([ 1., 2., nan])

# Also correct

a.to_numpy(dtype='int', na_value=-1)

# array([ 1, 2, -1])

'

이것은 'called out in the docs' 입니다.

당신이 결과에서 'dtypes' 가 필요하다면...

다른 답변에서처럼, 'DataFrame.to_records' 는 이를 수행하는 좋은 방법입니다.

'df.to_records()

# rec.array([('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)],

# dtype=[('index', 'O'), ('A', '

'

죄송하지만, 'to_numpy' 로는 이 작업을 수행할 수 없습니다. 대신 'np.rec.fromrecords' 를 사용할 수 있는 대체 방법이 있습니다.

'v = df.reset_index()

np.rec.fromrecords(v, names=v.columns.tolist())

# rec.array([('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)],

# dtype=[('index', '

'

성능적으로는 거의 동일합니다 (사실, 'rec.fromrecords'를 사용하는 것이 조금 더 빠릅니다).

'df2 = pd.concat([df] * 10000)

%timeit df2.to_records()

%%timeit

v = df2.reset_index()

np.rec.fromrecords(v, names=v.columns.tolist())

12.9 ms ± 511 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

9.56 ms ± 291 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

'

새로운 방법을 추가하는 이유

'to_numpy()' ('array'을 추가로 포함한) 는 두 개의 GitHub 이슈 'GH19954'와 'GH23623' 아래의 토론을 통해 추가되었습니다.

구체적으로, 'the docs' 이유를 언급하세요.

[..] with '.values' 그것은 반환된 값이 실제 배열인지, 변형된 배열인지 또는 pandas의 사용자 정의 배열 중 하나인지 불분명했습니다. 예를 들어, eriodIndex' , # 와 함께 '.values' 는 매번 새로운 주기 객체의 'ndarray' 를 생성합니다. [...]

'to_numpy' 은 API의 일관성을 개선하기 위해 노력하고 있습니다. 이는 올바른 방향으로의 주요한 진전입니다. 현재 버전에서는 '.values' 은 폐기되지 않을 것이지만, 나중에 폐기될 수도 있으므로 사용자들에게 가능한 빨리 새로운 API로 마이그레이션을 권유하고 싶습니다.

다른 해결책에 대한 비판

'DataFrame.values'은(는) 일관성 없는 동작을 보입니다, 이미 언급되었습니다.

'DataFrame.get_values()' 은(는) 'quietly removed in v1.0' 였으며 이전에 v0.25에서 폐기되었습니다. 이전에는 'DataFrame.values' 의 래퍼에 간단히 래핑되었기 때문에 앞에서 언급한 모든 내용이 해당됩니다.

'DataFrame.as_matrix()'은(는) v1.0에서 제거되었으며, 이전에 v0.23에서 비권장되었습니다. 사용하지 마세요!

답변 2

판다스 데이터프레임을 넘파이 어레이로 변환하는 방법은 매우 유용합니다. 판다스는 데이터 조작 및 분석에 사용되는 강력한 라이브러리인 반면, 넘파이는 다차원 배열을 처리하기 위한 효율적인 도구입니다. 따라서, 판다스 데이터프레임을 넘파이 어레이로 변환하여 넘파이의 다양한 기능을 활용할 수 있습니다.

먼저, 판다스 데이터프레임을 넘파이 어레이로 변환하기 위해서는 'numpy'라이브러리를 임포트해야 합니다. 다음과 같이 코드를 작성하면 됩니다:

```

import numpy as np

# 판다스 데이터프레임 생성

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# 넘파이 어레이로 변환

array = np.array(df)

```

위의 코드에서, 'np.array()' 함수를 사용하여 판다스 데이터프레임을 넘파이 어레이로 변환합니다. 이렇게 하면 데이터프레임의 각 행과 열이 어레이의 원소로 들어가게 됩니다. 이제 'array' 변수를 이용하여 넘파이의 다양한 기능을 사용할 수 있습니다.

판다스 데이터프레임을 넘파이 어레이로 변환하는 것은 데이터 처리 및 분석 작업에서 유용한 기술입니다. 넘파이는 다차원 배열을 다루기 위해 최적화되어 있으므로, 어레이로 변환하여 넘파이의 다양한 함수와 연산을 적용할 수 있습니다. 예를 들어, 넘파이 어레이를 이용하여 특정 조건에 맞는 데이터를 검색하거나, 어레이간의 연산을 수행하거나, 통계 분석을 수행하는 등 다양한 작업을 할 수 있습니다.

따라서, 판다스 데이터프레임을 넘파이 어레이로 변환하는 방법은 데이터 처리 및 분석에 관심 있는 사람들에게 중요한 기술일 것입니다. 이를 통해 더 나은 데이터 조작과 분석이 가능해지며, 효율적이고 정확한 결과를 얻을 수 있습니다. 따라서, 판다스와 넘파이를 함께 사용하여 데이터를 처리하는데 있어서 이러한 변환 기술을 알고 있는 것이 중요합니다.

반응형
Comments